2010-11-30 28 views
4

私は最近、パフォーマンスの問題を調査するためにprstatとprstat -ma lotを使用していましたが、私は基本的に、 Solaris 10。したがって、私は常に両方が常に同じ数字を表示するとは思わない。Solarisのprstatと 'prstat -m'の違いを解釈する

今日私は、2つの非常に異なる出力を示し、それらを解釈し、出力を理解するのに問題がある機会に出会った。このマシンは、いくつかの大規模なWebSphereプロセスとOracleデータベースを備えた負荷の高い8-CPU Solaris 10です。システムは実際には約15分(負荷平均> 700)の間停止しました。私はprstat情報を得るのが難しかったが、すぐに発行された "prtstat 1 1"と "prtstat -m 1 1"の出力を得ることができた。出力の

トップライン:

prstatは1:1(いくつかの秒後)

 
    PID USERNAME SIZE RSS STATE PRI NICE  TIME CPU PROCESS/NLWP 
    8379 was  3208M 2773M cpu5 60 0 5:29:13 19% java/145 
    7123 was  3159M 2756M run  59 0 5:26:45 7.7% java/109 
    5855 app1  1132M 26M cpu2 60 0 0:01:01 7.7% java/18 
16503 monitor 494M 286M run  59 19 1:01:08 7.1% java/106 
    7112 oracle  15G 15G run  59 0 0:00:10 4.5% oracle/1 
    7124 oracle  15G 15G cpu3 60 0 0:00:10 4.5% oracle/1 
    7087 app1  15G 15G run  58 0 0:00:09 4.0% oracle/1 
    7155 oracle  96M 6336K cpu1 60 0 0:00:07 3.6% oracle/1 
... 
Total: 495 processes, 4581 lwps, load averages: 74.79, 35.35, 23.8 

は、prstat -m 1 1

 
    PID USERNAME USR SYS TRP TFL DFL LCK SLP LAT VCX ICX SCL SIG PROCESS/NLWP 
    7087 app1  0.1 56 0.0 0.2 0.4 0.0 13 30 96 2 33 0 oracle/1 
    7153 oracle 0.1 53 0.0 3.2 1.1 0.0 1.0 42 82 0 14 0 oracle/1 
    7124 oracle 0.1 47 0.0 0.2 0.2 0.0 0.0 52 77 2 16 0 oracle/1 
    7112 oracle 0.1 47 0.0 0.4 0.1 0.0 0.0 52 79 1 16 0 oracle/1 
    7259 oracle 0.1 45 9.4 0.0 0.3 0.0 0.1 45 71 2 32 0 oracle/1 
    7155 oracle 0.0 42 11 0.0 0.5 0.0 0.1 46 90 1 9 0 oracle/1 
    7261 oracle 0.0 37 9.5 0.0 0.3 0.0 0.0 53 61 1 17 0 oracle/1 
    7284 oracle 0.0 32 5.9 0.0 0.2 0.0 0.1 62 53 1 21 0 oracle/1 
... 
Total: 497 processes, 4576 lwps, load averages: 88.86, 39.93, 25.51 

私は非常に苦労解釈を持っています出力。 prstatは、Javaの処理のかなりの量が、通常の状況で予想していたのと同じように、いくつかのOracleのものと一緒に進んでいると私に伝えているようです。 prtstat -mは、大量のシステム時間を消費するOracleが完全に支配的なマシンを示し、CPU全体が過負荷になっています(LATの数が多い)。

私はprstat -mの出力を信じる傾向があります。これは、この時間にシステムが感じたものに非常によく似ているからです。完全に静かで、WebSphereからのユーザー要求処理はほとんどありません。しかし、なぜprstatは数が大きく異なるのでしょうか?

これについての説明は歓迎します!

CU、ジョー

答えて

4

Solaris上prstat -mの既知の問題は、CPU使用率の数値が計算されている方法であります - あなたが見る値は、プロセス内のすべてのスレッド(LWP数)を超える平均、ひいては遠くですされています数多くのスレッドを持つJavaアプリケーションサーバー(NLWPを参照)など、多量のマルチスレッドプロセスには低すぎます。それらのダース以下はおそらくCPUの豚なので、JavaのCPU使用率は「低」になります。その効果を見るにはLWP(スレッド)の内訳を取得するにはprstat -Lmと呼ぶ必要があります。参考:

http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6780169

さらにパフォーマンスモニタリングデータがなければ、それはあなたがそこに見たものの非投機的な説明を与えることは難しいです。私はjava内でロックの競合を想定しています。これを引き起こす可能性のある特定のワークロードは、マルチスレッド化されたメモリマップドI/Oであり、プロセスアドレススペースのロックにすべて詰まります。しかし、純粋にJavaのユーザーサイドのロックである可能性があります。 Javaプロセスの1つにあるplockstat、および/または単純なdtraceプロファイリングが役に立ちます。

+0

ありがとう、それは完全にそれを説明する!その間、prstat -Lm、plockstat、およびdtraceを使用して監視を開始しましたが、これ以上の状況はありませんでした。だから私たちはまだ何が起こったのか正確にはわからない。 – jammann

関連する問題