我一直在研究如何为网站启用 CPU 限制。
在相应应用程序池的高级设置下,我设置了
CPU 限制:95000
限制操作:无操作
限制间隔:5
放置一晚后,我检查了事件日志,以查看工作进程被回收的频率。令我惊恐的是,每隔几分钟就会回收一次,这意味着服务器在大部分时间都处于最大负荷状态,这是不正确的,记录的总 CPU 使用率从未超过 50%。
白天使用任务管理器、资源管理器和 PerfMon 并调整上述值,他们都同意总体 CPU 使用率平均为 13%,但是当您查看单个进程的 CPU 使用率时,PerfMon 会有所不同(计数器:Process\% Process Time(w3wp) 报告平均值为 30%-40%)。这个计数器设法达到了 300% 的高位,阅读后发现这是因为它是所有核心的所有使用率的总和,而不是像其他计数器那样标准化。
现在我的问题是 IIS CPU 限制根据这个计数器做出决定,因此想要错误地回收该进程。
这是在裸机上安装的 Windows 2008 x64 标准版,四核,IIS 是唯一安装的角色。我已经配置了 BIOS 和 Windows 电源管理以提高性能,因为我想知道 CPU 速度的提高/降低是否会影响这一点,但事实并非如此。
我不需要诊断高 CPU 使用率,我们只想在进程达到高水平时正确地回收进程。
我想我一定是在其他地方错过了一些依赖项设置,现在不知道如何正确实现这个 CPU 限制。
答案1
要在 Perfmon 中获得类似的数字,您需要将 Perfmon 中获得的输出记录除以系统上的 CPU 数量。请注意,Perfmon 和 TaskManager 使用不同的方式收集该信息。
例如 - 我有一个具有 3 个 vCPU 的 VM - 一个进程可以达到的最大值为 300%,因此我只需将该进程的 Perfmon 记录除以 3。