我有一个Linux框托pipe一个相当低stream量的网站。 这是一个运行Ubuntu 10.04的亚马逊EC2“小型”实例。 当我运行“顶部”时,通常会看到2到3之间的负载,这在我的经验中是相当高的。 然而,机器上似乎并没有太多的事情发生 – CPU几乎总是空闲,通过观察apache2 access.log文件,我可以看到没有太多的请求正在通过。 我怎么知道哪些进程正在等待CPU,这样我就可以试着理解为什么负载指标如此之高?
使用顶部,你可以看到哪些线程正在运行,哪些正在睡觉。 这应该让你至less知道什么是消耗你的资源,如果我们谈论的CPU瓶颈。
[xxx@absynthe proc]$ top -H
应该像这样调出一个屏幕:
top - 17:54:38 up 37 min, 2 users, load average: 0.03, 0.06, 0.07 Tasks: 338 total, 2 running, 336 sleeping, 0 stopped, 0 zombie Cpu(s): 4.1%us, 2.3%sy, 0.0%ni, 92.1%id, 1.5%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 3852932k total, 1596468k used, 2256464k free, 47108k buffers Swap: 5963768k total, 0k used, 5963768k free, 681728k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1853 root 20 0 196m 38m 15m S 9.7 1.0 1:57.58 Xorg 2186 xxx -6 0 564m 8828 7216 S 3.9 0.2 0:43.69 pulseaudio 2611 xxx 20 0 1095m 235m 27m S 3.9 6.3 2:29.52 firefox 2179 xxx 9 -11 564m 8828 7216 S 1.9 0.2 0:38.34 pulseaudio 2671 xxx 20 0 1087m 43m 18m S 1.9 1.2 0:06.06 plugin-containe 2820 xxx 20 0 1275m 67m 23m S 1.9 1.8 0:13.13 souphttpsrc13:s 2824 xxx 20 0 315m 13m 9492 S 1.9 0.4 0:02.35 gnome-terminal 3114 xxx 20 0 15088 1300 820 R 1.9 0.0 0:00.02 top 1 root 20 0 19236 1440 1152 S 0.0 0.0 0:01.07 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.17 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/1
名为S的列(即右边的第8个)显示睡眠线程的S和运行线程的R。 您可以通过按F(大写)并select处理状态字段来selectsorting顺序。 然后,您可以通过按R(大写)来反转sorting顺序,以便首先看到正在运行的线程。
如果你的问题不是CPU瓶颈,我需要一些更多的信息来帮助你。 也许你可以像我在上面的例子那样发布你的顶端。
希望这可以帮助。
编辑:
如果您想知道是否遇到某种I / O瓶颈,可以发出以下命令: vmstat -s并查找IO等待CPU的滴答。 如果以几秒的间隔运行该命令,则该值会上升很多,您可能会遇到I / O瓶颈。 在这种情况下,使用iotop来查看哪些进程正在使用更多的I / O资源可能会更好。
负载指示器不是由高CPU使用率造成的。 进程可以等待其他原因,如磁盘和networkingI / O。
在Amazon EC2小型实例中,磁盘I / O非常糟糕,特别是/ dev / sda2。
您可以在debian / ubuntu上运行iotop(apt-get install iotop)来查看哪个进程使用I / O。