使用System.Diagnostics.Process启动Java应用程序

时间:2017-06-17 18:49:01

标签: java powershell

$startCount = 5;
$processors = Get-WmiObject -Class Win32_ComputerSystem | select -
ExpandProperty "NumberOfLogicalProcessors";
$perInstance = $processors / $startCount;
$affinityloop = 1;
$affinityvalue = 0;

for($i=1; $i -le $startCount; $i++) {
   $affinityvalue = 0;
   for($u=1; $u -le $perInstance ; $u++) {
     $affinityvalue = $affinityvalue + $affinityloop;
     $affinityloop = $affinityloop * 2;
   }
   $ps = new-object System.Diagnostics.Process;
   $ps.StartInfo.Filename = "C:\jdk\bin\java.exe";
   $ps.StartInfo.Arguments = " -server -Xms10240m -Xmx10240m -XX:+UseG1GC -cp `".;*`" Worker";
   $ps.start();
   Write-Host $affinityvalue ;
   $ps.ProcessorAffinity = [Convert]::ToString($affinityvalue, 16);
}

我正在尝试在两个不同的NUMA节点上启动Windows Java应用程序。有人能用Diagnostics.Process格式完成此任务吗?此代码可以正常工作,但创建的所有应用程序都在同一个NUMA节点上,因此只使用50%的功率。

我尝试使用$mod = ($i % 2);之类的代码来帮助准备一些替代NUMA节点的方法,但不确定如何在脚本中指定它。

修改

尝试与ProcessorAffinity进行负载均衡,由于Double无法转换为IntPtr而导致崩溃

编辑2

所以看起来Windows将处理器超过64组分组。似乎找不到像ProcessAffinity那样改变它的方法。我猜它不常见。您可以在任务管理器中轻松完成,只需找到在Powershell或类似方法中执行此操作的方法。

0 个答案:

没有答案