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


42

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


gnome GUIを使用している場合、システムモニターアプレットをパネルに追加できます。設定では、IO-Waitに失われたサイクルを白で表示するように設定し、メモリ、CPU、ディスクの読み取り/書き込みグラフを表示するように設定できます。通常、デフォルトのグラフの色を変更して、ユーザー/ OSのメモリとディスクの読み取り/書き込みを区別しやすくします。これは本当の解決策ではありませんが、回答に記載されているすべてのツールと一緒に使用すると便利です。
ジェレミー

1
@ luis-alvaradoこの質問は役に立たないことに同意しませんが、これはStackOverflowなどにより適しているかもしれないと主張します。私はここに来て解決策を探しました。
skeggse

質問通りの質問の問題は、実行環境を考慮していないことです。ジョブ/プロセスのホストコンポーネントのボトルネックを発見するのに最も効果的な方法は、ジョブのランタイム、実行環境、ホストOS、ハードウェアなど、および各コンポーネントがそれを検査するために使用できるツールに密接に関係しています。一部のランタイム(たとえば、ErlangランタイムまたはIBMのJVM)には、環境全体にまたがる詳細なツールがありますが、その他のツールにはツールがまったくなく、htop / iotop / etcに基づいて経験に基づいた推測を行うことができます。あなたに見せることができます。
zxq9

回答:


19

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

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

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

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

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

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

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


2
これらすべてを結び付けるツールはありますか?
ssanj

通常はありませんが、ご使用のシステム(Solaris / FreeBSD / Mac OS X?)でdtraceを使用できる場合、それを使用するだけではるかに向上する場合があります。
-Sudhanshu

LinuxにSystemtapがあることを思い出しました(dtraceに似ています)。ただし、ツールの成熟度が不明です。
-Sudhanshu

vmstatは便利です。
ジェームズ


9

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


4

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

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

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

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

参照してくださいプロセスの「待機チャンネル」とは何ですか?


2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.