1

I am running a java application on Intel(R) Xeon(R) machine which has 72 CPUs (with Hyperthreading on). Since, Microsoft groups CPUs into two groups if there are more than 64 CPUs, the java application uses only 1 group (or in other words 36 CPUs). See the snapshots below for the grouping and CPU usage details. As we can see, the java application is using 36 CPUs at capacity but not able to use other CPUs.

enter image description here

enter image description here

I added +UseNUMA in JVM parameters but it did not work. Does anyone know of JVM option to make it use all CPU groups?

The windows server machine has 72 CPUs after hyperthreading. Windows, by default, groups the CPUs into two memory nodes if number of CPUs are more than 64 (https://msdn.microsoft.com/en-us/library/dd405503(VS.85).aspx). Java application uses only 1 nodes and thus not using the computer at capacity. I enabled node-interleaving but it didn't help either. So, my question is if there is a way to span Java application over multiple memory nodes.

Gaurav
  • 193
  • 1
  • 1
  • 12
  • Just curious: What does Java show for this code `Runtime.getRuntime().availableProcessors();` on the machine? – Michael Markidis Jun 09 '16 at 17:47
  • Not sure if that helps, but maybe you could try other JVMs, like http://www.ibm.com/developerworks/java/jdk/java8/ (I *believe* you can download IBM java for free, worst case, you might have to register an IBM id). – GhostCat Jun 09 '16 at 17:49
  • Michael, The available number of processors is shown to be 36 when I run Runtime.getRuntime().availableProcessors() – Gaurav Jun 09 '16 at 17:51
  • Hyperthreading may not count. You only have 36 physical cores. – SnakeDoc Jun 09 '16 at 17:54
  • @Gaurav Then that particular JVM at that particular invocation only knows about 36 "logical" cpu cores. – Michael Markidis Jun 09 '16 at 17:54
  • Note: The Runtime.getRuntime().availableProcessors() call takes Hyperthreading into consideration. – Michael Markidis Jun 09 '16 at 17:55
  • @MichaelMarkidis It seems you are correct: http://stackoverflow.com/a/9423537/2161954 – SnakeDoc Jun 09 '16 at 17:58
  • based on http://area.autodesk.com/blogs/max-station/n268-how-many-cores-does-3ds-max-support# I'd say it's simply not possible unless java has support for windows' specific mechanism. The numa option is only memory related (prefers the local memory). – zapl Jun 09 '16 at 19:03
  • Also https://social.technet.microsoft.com/Forums/windows/en-US/9589087d-9036-4b39-bfce-059aed7b2abf/windows-allow-only-a-maximum-of-36-logical-processors-per-process-out-of-total-of-72-?forum=winserver8gen and https://bugs.openjdk.java.net/browse/JDK-6942632 – zapl Jun 09 '16 at 19:15

0 Answers0