8

Java プロセスに対していくつかのJMeterテストを実行して、Web アプリケーションの負荷 (500 人以上のユーザー) の応答性を判断しています。JMeter は、各 Web リクエストの応答時間を提供します。また、X 秒ごとに Tomcat Manager に ping を実行するスクリプトを作成しました。これにより、JVM ヒープの現在のサイズが取得されます。

サーバーで Tomcat が使用している CPU の割合の統計を収集したいと考えています。次のようにシェルスクリプトで実行しようとしましたps

PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID`

...X 秒ごとにコマンドを実行し、結果をテキスト ファイルに追加します。(疑問に思っている人のために、pmem= % mem usage とnlwpはスレッド数です)

ただし、これにより、「CPU使用率の%」の定義が希望とは異なることがわかりました-psのマンページによると、次のようにpcpu定義されています。

「##.#」形式のプロセスの CPU 使用率。これは、使用された CPU 時間をプロセスの実行時間 (CPU 時間/リアルタイムの比率) で割ったもので、パーセンテージで表されます。

言い換えれば、プロセスの存続期間pcpu中のプロセスの CPU 使用率を示します。

X 秒ごとにサンプルを取得したいので、現在の時点でのみプロセスの CPU 使用率を収集したいと思いますtop

シェルスクリプト内からこれを収集するにはどうすればよいですか?

4

6 に答える 6

13

top -b(および別の出力が必要な場合は他のスイッチ) を使用します。curses ウィンドウにジャンプする代わりに、stdout にダンプするだけです。

于 2008-09-08T18:21:06.027 に答える
6

JMeter などのテストを実行しながらサーバーを監視するために私が見つけた最も便利なツールはdstatです。サーバーからさまざまな統計情報を提供するだけでなく、スプレッドシートに簡単にインポートできるように csv に出力し、Python で記述されたモジュールを使用してツールを拡張できます。

于 2008-09-08T21:08:34.283 に答える
4

ユーザー負荷:top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $2}' |sed 's/.[^.]*$//' システム負荷:top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $3}' |sed 's/.[^.]*$//' アイドル負荷:top -b -n 1 |grep Cpu |tail -n 1 |awk '{print $5}' |sed 's/.[^.]*$//'

すべての結果は丸められた小数です。

于 2013-03-14T21:44:40.097 に答える
2

頭のてっぺんから、システム状態の /proc ファイルシステム ビューを使用します。man 5 procを見て、合計 CPU 使用率情報を含む /proc/PID/stat のエントリの形式を確認し、次を使用します。 /proc/stat でグローバル システム情報を取得します。「現在の時間」の使用状況を取得するには、おそらく「最後の N 秒間に使用された CPU」を意味します。2 つのサンプルを少し離れて取得し、現在の CPU 消費率を確認します。次に、これらの値を便利なものに変更できます。実際には、これは純粋なシェル スクリプトというよりも、おそらく Perl/Ruby/Python の仕事です。

/proc/PID/status で求めている大まかなデータを取得できる場合があります。これにより、プロセスのスリープ平均が得られます。かなり粗いデータですが。

于 2008-09-08T18:28:36.757 に答える
0

また、反復回数として 1 を使用すると、$delay 時間内に別のスナップショットを取得するのを待たずに現在のスナップショットを取得できます。

top -b -n 1
于 2013-01-25T11:08:26.793 に答える