
RHEL 6.3システムでプロセスが実行されています。とにかく、これは他のシステムで実行されているのと同じプロセスよりも処理に時間がかかります。プロセスが遅く実行される理由、またはプロセスを遅くする並列に実行される他のプロセスがあるかどうかはどうすればわかりますか?
答え1
top
またはを使用して何が起こっているのかをデバッグしてみることもできますhtop
。
top
&htop
特定のプロセスによって消費されるリソースの量を表示します。プロセスを次のように実行します。/usr/bin/time myproc
実際に開始するのにどれくらいの時間がかかっているかを確認します。このコマンドは両方のシステムで同じユーザー時間ですが、異なる実行時間を表示する必要があります。
プロセスが各システムで同じ量の「有効な」時間を費やしていることを確認した後、または「他の」プロセスがシステムの速度を低下させ、プロセスがmachineA.machineA Bでより長い時間を費やしていることを確認できtop
ますhtop
。
はい
次のスクリプトがあるとします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かわからない場合は、まず上部のSystem IO Wait値()をtop
調べてください。wa
1 つ以上の CPU が IO を待っている場合、IO 待機値が増加します。アイドル状態が多く、IO待機値が低い場合、プロセスはある種の同期イベント(おそらくローカルまたはネットワークを介した一種のロック)を待っています。