$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
或类似方法中执行此操作的方法。