我们有一个 Win 2003 R2 TS (x86),它有时会出问题。直到现在我还没有亲自收集这方面的数据,但似乎大多数时候它运行良好,但有时我们会看到 CPU 使用率过高,很可能是中断造成的。
使用 procexp 我可以看到中断的峰值与其他非常相似的 TS 相比是不正常的。我没有这个特定“好日子”的基线,但问题就在那里。中断 CPU 使用率范围约为 1-10%,大多在 3% 左右。
Krview 显示以下内容(除外):
Module Hits %Total
intelppm 12195 48%
ntkrnlpa 8994 35%
win32k 1545 6%
hal 984 3%
通常我看到 intelppm >98%,这看起来像是正常的中断情况。
放大 ntkrnlpa 后显示如下内容:
Module Hits msec %Total Events/Sec
NtBuildNumber 1075 14031 9 % 1915401
RtlCaptureContext 1062 14031 9 % 1892238
ZwYieldExecution 991 14031 8 % 1765733
NtFreeVirtualMemory 803 14031 6 % 1430760
SeMarkLogonSessionForTermination 638 14031 5 % 136768
KeFlushEntireTb 577 14031 4 % 1028080
KiDispatchInterrupt 535 14031 4 % 953246
ExAllocatePoolWithTag 494 14031 4 % 880193
KeAreAllApcsDisabled 453 14031 3 % 807141
wctomb 441 14031 3 % 785760
...
这是我遇到的难题...我不知道为什么这些函数会导致中断,也不知道哪些程序正在调用它们。有人能帮我解决这个问题吗?
我们运行了十几个会计应用程序,其中一些在 softgrid (app-v) 和 MS Office 上运行。Taskman 没有指出任何明显的不良流程。
我唯一一次看到类似行为是在 VMWare VM 上使用过时/不匹配的 vmtools 时。此服务器在物理刀片上运行,与大约 14 个其他表现良好的 TS 相同。
不,这不是 PIO 模式。:-)
答案1
每个系统调用(内核函数)都会导致中断。不过,我不确定这些是否能解释性能不佳的原因。此外,要查看哪些程序正在调用它们,最好深入研究特定进程;本质上,您正在做的是内核中断分析(ntkrnlpa 是物理地址扩展 NT 内核)。
鉴于 SeMarkLogonSessionForTermination 和 NtBuildNumber 的使用率如此之高,可能有某种原因导致该服务器比其他服务器更频繁地建立和拆除会话,但这似乎不是一个可能的原因。
症状究竟是什么?检查硬件可能是个好主意。