プロセスがCPU、メモリ、またはディスクにバインドされているかどうかを確認するにはどうすればよいですか?
プロセスがCPU、メモリ、またはディスクにバインドされているかどうかを確認するにはどうすればよいですか?
回答:
それにはブードゥー教が必要です。場合によります。例:
メモリが十分にあり、ディスクがビジーであると思われない場合は、 CPUに依存している可能性があります。CPU使用率を調べ、その境界が100%にある場合はCPUにバインドされています。そうでない場合、実装に人為的なボトルネックがあります。たとえば、デュアルコアCPUでは、シングルスレッドプロセスはCPU使用率が50%を超えることはありません。
CPUとメモリは使用できるが、ディスクが非常にビジーである場合、またはIOの待ち時間が長いと思われる場合は、IOがバインドされている可能性があります。ディスクの追加(RAID?)が役立つかどうかを確認します。
上記のどれでもない?使用可能なメモリを確認してください。
十分な記憶?プロセス自体に人為的なボトルネックがある可能性があります。つまり、誰かがsleep(1)を削除するのを忘れたのでしょうか?ナアは、通常それほど簡単ではありません。;)
パフォーマンスに敏感な製品を扱うほとんどの企業にパフォーマンスエンジニアのためのラボ全体があるのには理由があります!
sar、vmstat、iostat、oprofile、lockstat、dtrace、製品固有のパフォーマンス監視ツールなどのツールを使用して、パフォーマンスの問題をデバッグします。
上記の他のツールと同様に、実行しps l PID
、関連するプロセスIDを挿入するか、topまたはhtopのSTATEおよびWCHAN列を確認します。
D(ディスク用)状態の場合、ファイルIOを実行しています。これは、大量のファイルを読み込んでいるか、大量のメモリとスワッピングを使用しているためです。WCHAN列は、内部にあるカーネル機能を示します。それらをグーグルで検索するか、ここで尋ねると、それらが何を意味するかを示すことができます。
R(実行)状態にある場合、ユーザー空間でCPUを使用しています。つまり、その時点でCPUがバインドされています。
S(スリープ)状態の場合は、割り込み可能なシステムコール内にあります。つまり、実際にスリープ状態になっているか、ネットワークトラフィックやロックを待機しているようなことをしている可能性があります。繰り返しになりますが、特定のwchanを見るともっとわかります。
参照してくださいプロセスの「待機チャンネル」とは何ですか?