当进程“时间”停止在顶部时,这究竟意味着什么?

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 时间量。

              党卫军#1

如果一个进程可以在多个 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自己检查一下它为您提供的用于解决此类问题的选项