我将调查为什么我们会收到关键交换警报,我会发现类似以下内容:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
14683 user1 30 10 16.0g 772m 744 S 0.3 0.3 277:24.87 6.5g MATLAB
14576 user1 30 10 8125m 1.1g 736 S 0.3 0.4 261:16.73 4.1g MATLAB
其中 TIME+ 列对于这些进程被冻结。
我的问题是,上面这意味着什么?
据我了解,停止时间意味着它是一个休眠进程/不被CPU处理。然而上面的例子显示了 0.3% 的 CPU 使用率,所以尽管它非常小,但时间列不应该继续增加吗?
这些过程“完成”了吗?在这种情况下,如何清理它们?启动它们的用户是否需要确认它们或进行其他操作才能释放这些资源?
答案1
如果您运行一个假作业,例如,sleep 120
然后观察它,htop
您会注意到它的状态又S
称为“睡眠”,并且进程TIME
在整个持续时间内保持在 0:00.00。
这是因为该进程消耗 0 CPU 时间,这正是本TIME
专栏的目的。它跟踪给定进程已使用的 CPU 时间量。
如果进程可以在多个 CPU 核心上运行,则此计数有时可能会令人困惑,因为它似乎消耗的时间比可用的时间多。所发生的一切是,如果您有 X 个核心,那么您的时间可能会显示为 X * TIME。
答案2
您可能会得到这样的差异的原因是因为 TIME+ 列不考虑列出的进程的死亡生成子进程所使用的 CPU 时间。因此,我想您显示的行表明应用程序正在(可能很快)产卵的孩子几乎立即死亡..
So, the CPU usage is due to spawned children which do not count in the TIME+ column.
您可以通过“S”开关更改顶部以执行累积时间。
但我认为你正在寻找错误的指标来了解你想要调查的内容。
strace -p <pid>
是您的朋友,可以让您了解正在运行的进程以及它到底在做什么。
Strace 有多种选择。一些值得注意的选项包括 -f、-ff、-i、v 等。Strace 是一个最有用的工具,因此最好亲自查看man strace
它为您提供的选项,以解决此类问题