我想从 Windows Shell 读取进程的(累积)页面错误,以决定何时终止它。该进程将动态启动。
我找到了杀戮部分(例如这里:如何在 Windows 上通过进程名称自动监视和终止进程),但我找不到读取页面错误的方法。我尝试使用 Windows 资源工具包中的 pfmon.exe(安装了 rktools.exe,尽管它引发了不兼容警告)和 taskmgr,它可以工作 - 我尝试使用 MathKernel(有问题的进程,在我将其添加到 PATH 之后),pfmon 说它不受支持。
我知道任务列表,但它只显示 CPU 时间和内存使用情况。
还有其他方法可以读取页面错误吗?任务管理器可以以某种方式自动使用吗?
背景:
这与我关于 Mathematica 中的一个问题的帖子有关这里我找不到解决方案(我尝试了那里的 1 个答案)。我的脚本运行 8 个并行的 Mathematica 内核进行计算,计算大约需要 10 个小时,有时其中一两个会阻塞。我已经为每次计算重新启动它们,但行为仍然存在。目前,我定期使用任务管理器检查它们并终止积累大量页面错误的 MathKernel.exe 进程。请注意,当其他 MathKernel.exe 进程仍在运行时,处理器时间/负载和内存使用率没有帮助。这就是我需要页面错误的原因 - 我想每分钟比较所有 8 个进程,如果一个进程的页面错误是另一个进程的 10 倍,我想终止它。
答案1
还有其他方法可以读取这些数据吗?
您可以使用列表从Windows 系统内部:
记忆缩写键
所有内存值均以 KB 显示。
Pri: Priority Thd: Number of Threads Hnd: Number of Handles VM: Virtual Memory WS: Working Set Priv: Private Virtual Memory Priv Pk: Private Virtual Memory Peak Faults: Page Faults NonP: Non-Paged Pool Page: Paged Pool Cswtch: Context Switches
该faults
值是页面错误的总次数。
您将需要想要监控的进程的进程 ID。
示例输出:
> pslist -m 6272
PsList v1.4 - Process information lister
Copyright (C) 2000-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Process memory detail for HAL:
Name Pid VM WS Priv Priv Pk Faults NonP Page
firefox 6272 2707156 1038508 1015532 1191600 34880695 194 596
您可以使用批处理文件或 PowerShell 脚本来解析此输出。
免责声明
我不隶属于Windows 系统内部无论如何,我只是他们软件的最终用户。