我登录到一个具有多处理器的服务器并启动了 20 个 Python 程序,每个程序处理我的部分数据。
但是耗时太长了,检查了一下top
,发现所有的 ipython 进程都处于休眠状态,到底是怎么回事?
$ top -u calc
top - 13:36:27 up 31 days, 4:48, 1 user, load average: 0.13, 0.21, 0.20
Tasks: 335 total, 1 running, 334 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 66003900 total, 11998508 used, 54005392 free, 694584 buffers
KiB Swap: 0 total, 0 used, 0 free, 3192728 cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
105953 calc 20 0 13676 1568 980 R 1 0.0 1:04.91 top
92380 calc 20 0 507m 107m 18m S 0 0.2 248:47.52 ipython
92379 calc 20 0 507m 108m 18m S 0 0.2 244:19.90 ipython
92378 calc 20 0 510m 111m 18m S 0 0.2 257:01.33 ipython
92377 calc 20 0 510m 110m 18m S 0 0.2 252:13.59 ipython
92376 calc 20 0 514m 114m 18m S 0 0.2 247:35.26 ipython
92375 calc 20 0 503m 104m 18m S 0 0.2 222:48.84 ipython
92374 calc 20 0 514m 114m 18m S 0 0.2 247:16.59 ipython
92373 calc 20 0 508m 108m 18m S 0 0.2 252:58.08 ipython
92372 calc 20 0 516m 116m 18m S 0 0.2 241:42.16 ipython
92364 calc 20 0 511m 110m 18m S 0 0.2 229:59.30 ipython
92363 calc 20 0 507m 107m 18m S 0 0.2 255:22.32 ipython
92362 calc 20 0 516m 116m 18m S 0 0.2 238:59.80 ipython
92361 calc 20 0 506m 107m 18m S 0 0.2 253:45.55 ipython
92360 calc 20 0 510m 110m 18m S 0 0.2 250:11.67 ipython
92359 calc 20 0 507m 108m 18m S 0 0.2 240:12.78 ipython
88737 calc 20 0 12832 5192 1568 S 0 0.0 0:00.16 bash
88735 calc 20 0 9248 1340 1120 S 0 0.0 0:00.00 bash
有关 CPU 的一些信息:
$ grep 'physical id' /proc/cpuinfo|sort -u|wc -l
输出2
grep 'core id' /proc/cpuinfo|sort -u|wc -l
输出10
grep 'processor' /proc/cpuinfo|sort -u|wc -l
输出40
答案1
您只能看到系统的快照视图,并且在特定时刻,您的所有进程都处于“S”状态。这就是“S”状态的含义
可中断睡眠(等待事件完成)
如果您查看 TIME+ 列,您会发现所有进程都在消耗 CPU 时间,并且大体上它们消耗的时间相同。
在我看来这很正常。
什么原因导致进程进入“S”状态?其实有很多原因,通常是 I/O、等待信号量等。
如果您确实关心,您可以使用 strace 附加到某个进程并查看其正在做什么。
strace -p 92376
将跟踪您的进程 92376。