2008-09-08 25 views
7

私は、Javaプロセスに対していくつかのJMeterテストを実行して、Webアプリケーションがどの程度負荷がかかっているかを判断します(500人以上のユーザー)。 JMeterは各Webリクエストの応答時間を与え、Tomcat Managerにp秒ごとにpingを実行してJVMヒープの現在のサイズを取得するスクリプトを作成しました。シェルスクリプトでCPU使用率を取得しますか?

私はTomcatが使用しているCPUの%のサーバ上の統計情報を収集したいと考えています。コマンドごとにX秒を実行し、結果をテキストファイルに追加...

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

:私はこのようなpsを使用して、シェルスクリプトでそれを実行しようとしました。 (誰もが不思議ため、pmem =%のメモリ使用量とnlwpは、スレッドの数である)

私はこれは私が希望よりも、「CPU使用率の%」の異なる定義を与えることがわかってきましたが - のマンページによると"###" の形式でプロセスの

CPU使用率:PS、pcpuは以下のように定義されます。使用されたCPU時間を、プロセスが実行されていた時間(cputime/realtime ratio)で割ったものをパーセンテージで表します。言い換えれば

pcpuは私に、プロセスの寿命するためのプロセスの%CPU使用率を示します。

サンプルをX秒ごとに取得したいので、現在のプロセスでCPU使用率を収集したいと思っています。これはtopの場合と同じように (プロセスのCPU使用率最後の更新)。

これをシェルスクリプト内からどのように収集できますか?

答えて

13

top -b(異なる出力が必要な場合は他のスイッチ)を使用してください。 cursesウィンドウにジャンプするのではなく、stdoutにダンプするだけです。

2

システム状態の/ procファイルシステムビューを使用する - を参照してください。man 5 proc/proc/PID/statのエントリの形式を表示するには、totalを含むCPU使用率情報、/ proc/statを使用してグローバルなシステム情報を取得する。 「現在の時間」の使用量を取得するには、おそらく「最後のN秒間に使用されたCPU」を意味します。現在のCPU消費率を見るには、2つのサンプルを短時間離してください。これらの値を有用なものに変更することができます。本当に、これは純粋なシェルスクリプトよりPerl/Ruby/Pythonジョブのほうが多分です。

あなたはプロセスのスリープ平均を与える/ proc/PID/statusを使って、あなたが行っている大雑把なデータを取得できます。かなり粗いデータ。

5

JMeterなどのテストを実行中にサーバーを監視するための最も有用なツールは、dstatです。サーバーからの統計情報を提供するだけでなく、スプレッドシートに簡単にインポートできるようにCSVに出力し、Pythonで書かれたモジュールでツールを拡張することができます。

+0

dstatツールをお寄せいただきありがとうございます。 –

0

も1を繰り返し回数として使用するので、$遅延時間内にもう1つ取得するのを待たずに現在のスナップショットを取得します。

top -b -n 1 
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/.[^.]*$//'

すべての結果は、ラウンド10進数です。

関連する問題