web-dev-qa-db-ja.com

プロセスがCPU、メモリ、またはディスクにバインドされているかどうかを確認するにはどうすればよいですか?

プロセスがCPU、メモリ、またはディスクにバインドされているかどうかを確認するにはどうすればよいですか?

41
ssanj

それにはブードゥー教が必要です。場合によります。例:

  • 十分なメモリがあり、ディスクがビジーでないようであれば、それは多分 CPUバウンドです。 CPU使用率を調べ、その境界が100%にある場合はCPUにバインドされています。そうでない場合、実装に人為的なボトルネックがあります。例えば。デュアルコアCPUでは、シングルスレッドプロセスはCPU使用率が50%を超えることはありません。

  • CPUとメモリは使用できるが、ディスクが非常にビジーである場合、またはIOレイテンシが高いように見える場合、IOがバインドされている可能性があります。ディスクの追加(RAID?)が役立つかどうかを確認します。

  • 上記のどれでもない?使用可能なメモリを確認してください。

  • 十分な記憶?プロセス自体に人為的なボトルネックがある可能性があります。つまり、誰かがsleep(1)を削除するのを忘れた可能性がありますか?ナアは通常それほど簡単ではありません。 ;)

パフォーマンスに敏感な製品を扱うほとんどの企業にパフォーマンスエンジニアのためのラボ全体があるのには理由があります!

Sar、vmstat、iostat、oprofile、lockstat、dtrace、製品固有のパフォーマンス監視ツールなどのツールを使用して、パフォーマンスの問題をデバッグします。

16
Sudhanshu

iotopをチェックアウトすると便利です

11
ithkuil

多数のプロセス統計(メモリ、CPU使用率、I/Oなど)をリアルタイムでチェックするのに役立つツールは、htopです。これは、Sudhanshuによって名前が付けられたより専門的なツールに置き換わるものではありませんが、良いスタートになるかもしれません。

9
JanC

上記の他のツールと同様に、ps l PIDを実行して、関連するプロセスIDを挿入するか、topまたはhtopのSTATEおよびWCHAN列を確認します。

D(ディスク用)状態の場合、ファイルIOを実行しています。これは、大量のファイルを読み込んでいるか、大量のメモリとスワップを使用しているためです。 WCHAN列は、内部のカーネル機能を示します。彼らのためにグーグルで検索するか、ここで尋ねると、それらが何を意味するかを示すかもしれません。

R(実行)状態にある場合、ユーザー空間でCPUを使用しています。つまり、その瞬間にCPUがバインドされています。

S(スリープ)状態の場合、割り込み可能なシステムコール内にあります。これは、実際にスリープ状態であるか、ネットワークトラフィックまたはロックを待機するような動作をしていることを意味します。繰り返しますが、特定のwchanを見ると、より多くのことがわかります。

プロセスの「待機チャネル」とは? も参照してください。

4
poolie

topを実行し、CPU使用法の行を確認します。高いユーザー%は、CPUバウンドであることを示します。高い待機率は、IOバインドされていることを示します。

2
psusi