当我调用 时top
,%CPU
和TIME+
列似乎被冻结并且永远不会更新。相反,进程列表的前几行总是如下所示:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 49364 9168 5720 S 0,0 0,1 0:00.07 systemd
2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0,0 0,0 0:00.00 ksoftirqd/0
4 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0
5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/u24:0
7 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_sched
8 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcuos/0
尤其,所有流程显示 0,0 %CPU 和 0:00.00 TIME+,除了第一个进程 ( systemd
),它始终显示相同的不变值 0:00.07 TIME+,即使重新启动后。顶部有关 CPU 使用情况的摘要行似乎正在正常更新。
我尝试查看/proc/(pid)/stat
,并且 - 如果我正确理解其内容 - 验证这确实是存储在那里的信息。例如,如果 5814 是我启动的长时间运行进程的 PID:
$ cat /proc/1/stat | cut -f15 -d" "
7
$ cat /proc/5814/stat | cut -f15 -d" "
0
我使用的是带有所有最新更新的 Korora (Fedora) 23,运行内核版本 4.7.6。
是什么导致了这种行为,或者我该如何调试这个问题?
答案1
top(1) 首先显示按 CPU 使用率排序的正在运行的进程,然后用按 PID 排序的休眠进程填充表。
systemd(8) 是 init(8) 的变体,启动后可能不会做太多事情。 70 毫秒的 CPU 使用率可能是在您启动时发生的。当系统启动并运行时,init 进程 (PID=1) 除了保持活动状态外没有其他目的。
我的 systemd(8) 在 125 天零 12 小时内使用了 CPU 2:25.72,所以它的更新速度非常慢。
该列表中的其余进程是一些 Linux 的东西,您会注意到它们甚至不使用任何内存。