有没有办法限制进程的CPU /内存?

时间:2009-02-27 06:46:37

标签: windows performance testing cpu-usage

问题:我有一台开发者机器(读取:快速,大量内存),但用户有一台用户机器(读取:慢,内存不多)。

我可以使用Fiddler模​​拟慢速网络(http://www.fiddler2.com/fiddler2/) 我可以看一下使用Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)进程的CPU是如何使用的。

有什么方法可以限制进程可以拥有的CPU数量,或者进程可以拥有多少内存来更有效地模拟用户计算机? (例如,为了隔离性能问题)

我想我可以使用VM,但我正在寻找更轻松的东西。

我正在使用Windows XP,但欢迎任何Windows机器的解决方案。感谢。

5 个答案:

答案 0 :(得分:5)

平台SDK过去常常带有压力工具,可以在过去的好时光(SDK中的STRESS.EXECPUSTRESS.EXE)中执行此操作,但它们可能仍然存在(请检查您的平台SDK和/或Visual Studio安装这两个文件 - 不幸的是我在我输入的机器上安装了PSDK和VS.)

其他工具:

  • 记忆:性能&可靠性(例如处理失败的内存分配):可以使用EatMem
  • CPU :性能&可靠性(例如竞争条件):可以使用CPU BurnPrime95
  • 句柄(GDI,用户):可靠性(例如处理失败的GDI资源分配):???可能必须编写自己的,但是用完GDI句柄(有缺陷的GTK应用程序通常会把它们全部丢掉,直到系统上的所有其他应用程序像苍蝇一样开始死亡)才是对任何Windows应用程序的真正测试
  • 磁盘:性能&可靠性(例如处理磁盘已满):DiskFiller等。

另见this existing thread

答案 1 :(得分:3)

AppVerifier具有资源较低的模拟功能。

您还可以尝试将流程的优先级设置得非常低。

答案 2 :(得分:1)

您可以运行MemAlloc来咀嚼内存,一次可能会复制几份。

答案 3 :(得分:1)

我找到了一个相关的问题:

Set Windows process (or user) memory limit

该问题的已接受答案有一个指向Windows API SetProcessWorkingSetSize的链接,因此它不是一个可以限制进程可以使用的内存量的工具。

在更改进程可以使用的CPU资源量方面,如果您不介意每个核心限制资源的粒度,任务管理器可以更改进程的处理器关联。

在任务管理器中,右键单击某个进程并选择“设置关联...”,然后选择可以为其分配进程的处理器核心。

如果开发计算机有多个内核但用户计算机只有一个,那么,不要让进程在所有可用内核上运行,而是将进程的处理器关联性设置为只有一个内核。

答案 4 :(得分:0)

它与SetProcessWorkingSetSize

无关

只需使用内部Win32内核apis来限制CPU使用率