【问题标题】:Is there any way of throttling CPU/Memory of a process?有什么方法可以限制进程的 CPU/内存?
【发布时间】:2010-10-10 06:36:24
【问题描述】:

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

我可以使用 Fiddler 模拟慢速网络 (http://www.fiddler2.com/fiddler2/) 我可以使用 Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) 查看 CPU 在一段时间内的使用情况。

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

我想我可以使用虚拟机,但我正在寻找更轻便的东西。

我使用的是 Windows XP,但欢迎提供适用于任何 Windows 机器的解决方案。谢谢。

【问题讨论】:

    标签: windows performance testing cpu-usage


    【解决方案1】:

    在过去的好日子里,平台 SDK 曾经附带压力工具来执行此操作(SDK 中的STRESS.EXECPUSTRESS.EXE),但它们可能仍然存在(检查您的平台 SDK 和/或 Visual这两个文件的 Studio 安装 - 不幸的是,我正在输入的机器上没有安装 PSDK 和 VS。)

    其他工具:

    • 内存:性能和可靠性(例如处理失败的内存分配):可以使用EatMem
    • CPU:性能和可靠性(例如竞态条件):可以使用CPU BurnPrime95
    • handles(GDI,用户):可靠性(例如,处理失败的 GDI 资源分配):???可能需要自己编写,但 GDI 句柄用完(有缺陷的 GTK 应用程序通常会将它们全部吃掉,直到系统上的所有其他应用程序开始像苍蝇一样死掉)是对任何 Windows 应用程序的真正考验
    • 磁盘:性能和可靠性(例如处理磁盘已满):DiskFiller

    【讨论】:

    • 我试过 CPU 烧录,效果不错。虽然有点像大锤。不过我还没有尝试过eatmem。标记为已接受的答案。
    【解决方案2】:

    AppVerifier 具有低资源模拟功能。

    您也可以尝试将进程的优先级设置为非常低。

    【讨论】:

      【解决方案3】:

      您可以运行 MemAlloc 来消耗 RAM,一次可能需要几个副本。

      【讨论】:

        【解决方案4】:

        我发现了一个相关的问题:

        Set Windows process (or user) memory limit

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

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

        在任务管理器中,右键单击一个进程并选择“Set Affinity...”,然后选择该进程可以分配到的处理器内核。

        如果开发机器有很多内核,而用户机器只有一个,那么与其让进程在所有可用内核上运行,不如将进程的处理器亲和性设置为只有一个内核。

        【讨论】:

          【解决方案5】:

          与SetProcessWorkingSetSize无关

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

          【讨论】:

          • 哪些 api 提供了限制 CPU 使用的选项?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-03
          • 2014-05-08
          • 1970-01-01
          • 2020-05-18
          • 1970-01-01
          相关资源
          最近更新 更多