我有一个进程在一台 RHEL 6.3 机器上运行。不知何故,这比在另一台机器上运行的相同进程花费的处理时间更长。如何知道为什么该进程运行缓慢或者是否有其他并行运行的进程正在减慢该进程?
答案1
top
您可以尝试使用或来调试正在发生的情况htop
。
top
&htop
显示特定进程消耗的资源量。我会像这样运行你的流程:/usr/bin/time myproc
看看它真正需要多少时间才能启动。此命令应在两台计算机上显示相同的用户时间但不同的运行时间。
一旦您确定该进程在各个系统上花费了相同的“有效”时间量,您就可以使用 或top
来htop
确定哪些“其他”进程正在减慢系统速度,以便该进程在 machineA 上花费更长的时间. 机 B.
例子
假设我有以下脚本,doit.bash
.
#!/bin/bash
a=0
while [ 1 ]; do
let a=a+1
(( $a==100000 )) && exit
done
然后我在卸载的系统上运行它:
$ /usr/bin/time ./doit.bash
1.25user 0.10system 0:01.38elapsed 98%CPU (0avgtext+0avgdata 1272maxresident)k
0inputs+0outputs (0major+366minor)pagefaults 0swaps
然后我运行此命令来模拟我的盒子上的一些负载:
$ dd if=/dev/zero of=/dev/null
重复运行doit.bash
:
$ /usr/bin/time ./doit.bash
2.32user 0.20system 0:02.98elapsed 84%CPU (0avgtext+0avgdata 1268maxresident)k
0inputs+0outputs (0major+365minor)pagefaults 0swaps
您可以看到,doit.bash
从总用户时间和运行时间来看,运行时间都更长。
- run1 - (用户):1.25 秒 - (经过):1.38 秒
- run2 - (用户):2.32 秒 - (经过):2.98 秒
笔记:完成后,请确保Ctrl+C正在运行的命令。dd
答案2
您知道进程是否受 CPU 或 IO 限制吗?如果它只需要CPU,那么top
它就是你的朋友。如果 IO 有限,请查看vmstat -Sm 5
、iotop -od5
和iostat -m 5
。尝试找出问题是否是由设备性能缓慢、性能较差引起的,或者是否有其他东西在性能较差的系统上运行。
如果您不知道是 CPU 还是 IO 受限,请首先top
查看wa
顶部的系统 IO 等待值 ( )。如果一个或多个 CPU 正在等待 IO,则 IO 等待值将会升高。如果您有大量空闲且 IO 等待值较低,则您的进程正在等待某种同步事件(可能是本地或通过网络进行某种锁定)。