Cpt*_*rkt 14 cpu process top swap htop
我将调查为什么我们会收到重要的交换警报,我会发现类似的东西:
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
Run Code Online (Sandbox Code Playgroud)
对于这些进程,TIME+ 列被冻结。
我的问题是,在上面,这意味着什么?
据我了解,停止时间意味着它是一个休眠进程/未被 CPU 处理。然而,上面的例子显示了 0.3% 的 CPU 使用率,所以尽管它非常小,但时间列不应该继续增加吗?
这些过程“完成”了吗?在这种情况下,它们是如何清理的?启动它们的用户是否需要确认它们或释放这些资源?
slm*_*slm 16
如果你运行一个虚假的工作sleep 120
,然后在里面观看它,htop
你会注意到它的状态S
又名“睡眠”,并且进程TIME
在持续时间内保持在 0:00.00。
那是因为该进程消耗了 0 个 CPU 时间,这是该TIME
列的意图。它跟踪给定进程使用的 CPU 时间量。
如果一个进程可以在多个 CPU 内核上运行,这个计数有时会令人困惑,因为它似乎消耗了比可用时间更多的时间。发生的所有事情是,如果您有 X 个内核,那么您的时间可以显示为 X * TIME。
小智 5
你可能会得到这样的差异的原因是因为 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
自己检查一下它为您提供的用于解决此类问题的选项