我有一个带有第三方应用程序的四核系统,它偶尔会旋转几个进程(总是相同的可执行文件但只有几个实例)并占用100%的CPU时间。我还在同一个盒子(IIS和第三方)上运行了几个Web服务。
所有内核繁忙的问题是它使第三方Web服务器超时(IIS工作正常,但比平时慢)。我无法控制第三方Web服务器,它是更大产品的一部分,必须运行。因此,我尝试使用处理器关联(通过SysInternals Process Explorer)并将这些讨厌的进程限制为4个内核中的3个内核,并将第4个内核专用于第三方Web服务器,它似乎运行良好。
问题是它只在正在运行的进程上设置了亲和性,而不是在可执行级别上设置亲和力,所以在这些进程完成后再重新生成为新进程时,它们再次相同 - 它们占用了所有4个核心。所以,我已经在Google上搜索了这个来自Microsoft的ImageCfg.exe实用工具,但是我无法在微软网站上找到它以供下载,我发现有些人尝试了它,现在又抱怨说它并没有真正起作用。
有没有办法将亲和力粘贴到可执行文件上?
答案 0 :(得分:6)
http://waynes-world-it.blogspot.com/2009/06/processor-affinity-on-windows-server.html
PowerShell的
使用PowerShell为一个或多个正在运行的进程设置处理器关联。下面有一个示例脚本,将calc.exe的处理器掩码设置为前4个处理器。我喜欢这种方法,因为脚本很简单,很容易安排,适用于x86和x64,支持多个同名进程,至少部分是因为它突出了PowerShell管理的简单性。
请注意,如果您使用calc.exe(n!)的大数阶因子,您将生成100%的CPU,这对测试非常有用。下面的掩码是0xf = 1111 - 一个只允许使用前四个处理器的掩码:
$calcSet = Get-Process -ProcessName "calc"
foreach ($calc in $calcSet) {$calc.ProcessorAffinity=0xF}
答案 1 :(得分:5)
Process Lasso的一个特性是在启动该进程时设置进程的亲和力。
答案 2 :(得分:5)
您可能需要查看/AFFINITY
的{{1}}参数。
来自帮助:
start
由于Windows上的处理器关联是一个位掩码,您可能需要进行一些实验,但我认为AFFINITY The new application will have the specified processor
affinity mask, expressed as a hexadecimal number.
是第一个核心,因此1
是前三个核心,7
是所有核心四强。或F
只有第四个。
然后,您可以使用适当的参数调用8
来替换计划任务或快捷方式。
答案 3 :(得分:3)
使用SetProcessAffinityMask()。请注意,Processor Affinity is inherited!
您需要使用ImageFileExecutionOptions,特别是the "Debugger" option,并编写自己的小型可执行文件,调用自身的SetProcessAffinityMask(),然后生成一个新进程,即您要为其设置亲和性的进程。将其设置为调试器,您就完成了。
答案 4 :(得分:3)
您可以使用单进程关联应用程序填充程序在可执行级别强制使用一个处理器,这将强制进程进入一个核心。
这篇文章http://msdn.microsoft.com/en-us/library/bb173458.aspx有一段关于使填充物能够走向最低点。
答案 5 :(得分:3)
ImageCfg.exe实用程序确实有效。我今天刚用它来解决公司问题。它可以从http://www.robpol86.com/pages/imagecfg.php
获得Imagecfg -a 0x3 xxx.exe
例如,将.exe限制为CPU0和CPU1。
答案 6 :(得分:1)
显然这个帖子已经过时了,但我还是添加评论,以防万一有人在这个主题上搜索(就像我一样)
您可以尝试设置流程的优先级,即使它也是如此 决定使用100%的CPU,优先级更高的东西 在需要的时候接管。
自动执行此操作(而不是必须参与任务 经理)是我刚才问过的事。
start命令可用于设置进程的启动优先级。
EG。 start "my path\my process" /LOW
为低优先级。
允许优先级切换
LOW, NORMAL, HIGH, REALTIME, ABOVENORMAL, BELOWNORMAL
例如,可以从批处理文件中调用。
答案 7 :(得分:0)
您可以尝试设置流程的优先级,这样即使它决定使用100%的CPU,优先级更高的东西也可以在需要时接管。
Doing this automatically(而不是必须在任务管理器中玩)是我刚才问过的。