火曜日 2 17, 2009

GlassFish Enterprise Manager - Performance Monitor

perfmonitor_splash

GlassFish Enterprise Manager の Performance Monitor を試しました。先に進む前におさらいですが、Enterprise Manager には今のところ、Performance Advisor, Performance Monitor, SNMP Monitoring の 3 つが用意されていて、GlassFish v2.1 への付加機能として利用できます。Performance Advisor については先日書きました (その 1その 2) のでそちらもご参照下さい。

Performance Advisor は管理コンソールへのプラグインでしたが、Performance Advisor は JDK にもバンドルされている VisualVM ベースのスタンダロンアプリケーションです。SunSolve からパッチ 140749-01 として提供されています。で、実は VisualVM には以前から GlassFish 向けのプラグインが提供されていました。まずは 2 つを比べてみます。

GlassFish Performance Monitor

perfmonitor_gui

そしてこちらが VisualVM + VisualVM-GlassFish プラグイン (Version 1.1)

visualvm+gfplugin

一見かなり似た感じです。実際使ってみると Performance Advisor の方が多機能なのですが、GlassFish サブスクリプションをもってない方で興味がある場合は JDK の VisualVM で試してみるのもよいでしょう。<JDK_HOME>/bin/jvisualvm を実行し、「Tools」 -> 「Plugins」 -> 「Available Plugins」タブにて「VisualVM-GlassFish」をチェックし「Install」をクリックすることでプラグインが追加できます。

脱線しましたが、Performance Monitor に話を戻します。GlassFish サーバを起動し、監視の設定をします。GlassFish の管理コンソールを使うことができますが、Performance Monitor 側からも下記のように設定できます。とても便利です。テストなので、全て HIGH レベルでの監視を設定しました。

perfmonitor_config

各種コンポーネント毎に様々なデータをグラフ付きでモニタできるようになりました。下は HTTP リスナと、配備されたアプリケーションの監視画面です。サーバのスループットやスレッドプールの状態、サーブレット毎の応答時間など有益な情報が得られます。

perfmonitor_http
perfmonitor_app

あとは、VisualVM に元々備わっているプロファイラ、ヒープやスレッドダンプ等の機能ももちろん使えます。ぜひご活用下さい。

最後に、Sun GlassFish Enterprise Manager Performance Monitor 1.0 のドキュメントです。

金曜日 2 13, 2009

Performance Advisor その 2

前回の Performance Advisor についての投稿の続きです。

既に書いたように、Performance Advisor には大きく分けて次の 2 つの機能があります。1 つめは前回取り上げたもので、今回は 2 つめについてです。

用意されている管理ルールは次のよう。ちなみに、前回も今回もスクリーンショットは開発中のビルドで撮ったものなので、 特に UI の翻訳はリリースされているものと多少違う点ご了承下さい。

perfAdvisor_guiTree

管理ルールはもともと GlassFish に備わっている機能 (管理ガイドの 19 章参照) で、何らかのイベントとそれが起きたときにとるアクションを組で管理ルールとして設定しておくことで、管理タスクの一部を自動化できるとても応用範囲の広いものです。ただ、そのアクションや場合によってはイベントモニタも MBean として作らないといけないので、GUI だけで設定できる、というお手軽さはありませんでした。それが、Performance Advisor に用意されている管理ルールを使うことで、手軽にこれらを適用できるようになっています。

各々について見ていきます。まずは、「〜に関する警告」となっているものについて。これらは種々の値が、あらかじめユーザが設定したしきい値を上回る/下回ると、ログに記録したり、E メールで通知する管理ルールです。例えば、「物理メモリーに関する警告」の場合には、使用していない物理メモリの割合をしきい値として指定し、それを下回った際に E メールが送信されるように設定できます。

perfAdvisor_editPhysicalMemoryRuleEmail
perfAdvisor_emailedPhysicalMemoryWarning

ちなみに、他の「〜に関する警告」ですが、以下のようになっています。管理コンソールから説明をコピペ。

メモリーリーク メモリーリークの可能性が検出されたときに警告が送信されます。検出は、ガベージコレクション (GC) 実行後のメモリー使用量の割合に関する傾向分析によって行われます。GC 後のメモリー使用量が、ユーザーが定義したしきい値を超えると、警告が送信されます。
CPU 使用量の傾向 CPU 使用量の割合に関する傾向分析で、ユーザーが定義したしきい値を超える増加が示されると、警告が送信されます。
スループット 仮想マシン (VM) の稼働時間 (時間平均による GC 経過時間) のパーセンテージが、ユーザーが定義したしきい値を超えると、警告が送信されます。
GC 停止時間 前回のガベージコレクション (GC) 停止時間が、ユーザー定義の最大 GC 停止時間に対してユーザーが定義したパーセンテージを超えると、警告が送信されます。
ログエントリ ユーザーが指定したロガーに対して、ユーザーが指定したログレベル以上でログファイルに新しいエントリが作成されると、警告が送信されます。

「ログローテーションマネージャー」は、おそらく下の設定画面を見ることで機能を把握できると思うのですが、増加してゆくローテーション済みログファイルをどう対処するか、という問題を扱います。移動、削除のポリシーを、ファイルサイズ、ファイル数、もしくは時間で指定することができます。

perfAdvisor_editLogRotationManager

そして、「JDBC プールマネージャー」ですが、これは接続プールの最小維持接続数を負荷に応じてダイナミックに設定する機能です。英語ですが、Shalini が説明してくれています。

英語といえば、Performance Advisor 関連の動画などありましたので、最後にご参考まで。

木曜日 2 12, 2009

GlassFish Enterprise Manager - Performance Advisor

Sun GlassFish Portfolio が発表されました。いろんな情報があります。

情報が盛り沢山なのですが、私からは GlassFish v2.1 への付加機能としてサブスクライバのみに提供されるものの 1 つ、Enterprise Manager を何回かにわけてご紹介していこうと思います。Enterprise Manager には現時点で、以下のパッケージがあります。

  • Performance Advisor
  • Performance Monitor
  • SNMP Monitor

今回は Performance Advisor についていくつか試したので報告します。これ、どんなものかというと、管理コンソールへの追加機能で、大きく下記 2 つの機能を持ちます。

  • サーバ設定について静的にチューニングを支援する
  • 事前に用意された管理ルールを使って実行時のサーバを監視し、問題が検出されたらユーザに警告を送る

1 つめは、CPU, メモリなどサーバのリソース、GC の方針などいくつかの変数を指定すると、それに合わせた GlassFish の推奨設定を提示してくれる、というものです。提示されたものに関しては、それを見ながら自分で設定するもよし、もしくは全て受け入れるのであれば、そのままツールに設定させてしまうこともできます。このような調整はアプリケーションによる部分が大きいのであくまでも目安、参考に使う、というものですが、何もないのと何かあるのでは大違い、結構便利ではないでしょうか。

2 つめは GlassFish に以前から備わっていた MBean自己管理機能をベースに提供される機能で、以前だと自分で MBean を書かないといけなかったような、リソースの使用状況などをモニタし、あるしきい値を超えた際に警告をメールする、というようなことが Performance Advisor を使うことで簡単に実現できます。

なお、注意点として、この Performance Advisor は有償サブスクリプションを購入頂いているお客様へ提供されるものです。SunSolve からパッチ 140751 としてダウンロードできます。

今回は、静的にサーバ設定値を提示してくれる「チューナー」の機能を試してみました。以下の画面でいくつか値を入力、選択したりして「次へ」と進むとそれをベースとした設定変更の確認画面になります。

perfAdvisor_configTuner1

まずはデフォルトで数値が入っている 1 CPU コア、1 GB メモリなどをそのまま使って推奨される変更を見てみました。

perfAdvisor_configTuner2_1core_1gb

このスクリーンショット、クリックすれば大きいのが見れるのですが、手間ですので、一応表にします。主に下記のような推奨値を出してきます。これらをこのまま設定する場合は画面右上の「確認」をクリックしそのまま設定に進むこともできますし、全部は受け入れない、という場合には手動での変更のやり方がそれぞれの項目に書いてありますのでそれに従って自分で設定します。

1 コア、1024 MB、スループット重視、Cool Threads 機でない
JVM オプション-Dcom.sun.enterprise.server.ss.ASQuickStartup=false
JVM オプション-XX:+UseParallelGC
JVM オプション-XX:+UseParallelOldGC
JVM オプション-XX:LargePageSizeInBytes=2m
JVM オプション-XX:ParallelGCThreads=1
JVM オプション-Xmn512m
JVM オプション-Xms1024m
JVM オプション-Xmx1024m
システムプロパティ - JVM_HEAP_SIZE1024m
システムプロパティ - JVM_PARALLEL_GC_THREADS1
システムプロパティ - MAX_THREAD_POOL_SIZE4

次に、今テストで使っているマシン x2200 というマシンはデュアルコア Opteron が 2 機載っているので、これにあわせて CPU コア数と使用可能なメモリをそれぞれ、4 つ、2048 MB として同様に変更内容を確認してみます。以降スクリーンショットを貼るのは省略 (クリックすれば見れます) して、結果は次の様。前の���と比較すると変更した変数から予測されるとおりの結果になっていると思います。

4 コア、2048 MB、スループット重視、Cool Threads 機でない
JVM オプション-Dcom.sun.enterprise.server.ss.ASQuickStartup=false
JVM オプション-XX:+UseParallelGC
JVM オプション-XX:+UseParallelOldGC
JVM オプション-XX:LargePageSizeInBytes=2m
JVM オプション-XX:ParallelGCThreads=4
JVM オプション-Xmn1024m
JVM オプション-Xms2048m
JVM オプション-Xmx2048m
システムプロパティ - MAX_THREAD_POOL_SIZE16

さて、「Sun の Cool Threads サーバで実行していますか?」というチェックボックスはかなり気になります。T5220 という 8 コアの UltraSPARC T2 のマシンを借りて試します。コア数 8, メモリは変更無しで 2GB として変更内容を確認します。ちなみに、この T5220 は 1 ソケットで、コアあたり 8 スレッド並行処理 x 8 コアで 64 スレッドが OS から見えるマシンです。カッコイイ。

確認画面 の内容は以下のようなもの。Sun プラットフォームでヒープのラージページを 256 MB でとるように変わっています。あとはコア数が増えたことによるそれなりの結果。もしかしたら 8 ではなくて 64 と入れるべきだったのかもわかりませんが、未確認でよくわかりません。

8 コア、2048 MB、スループット重視、Cool Threads 機である
JVM オプション-Dcom.sun.enterprise.server.ss.ASQuickStartup=false
JVM オプション-XX:+UseParallelGC
JVM オプション-XX:+UseParallelOldGC
JVM オプション-XX:LargePageSizeInBytes=256m
JVM オプション-XX:ParallelGCThreads=6
JVM オプション-Xmn1024m
JVM オプション-Xms2048m
JVM オプション-Xmx2048m
システムプロパティ - MAX_THREAD_POOL_SIZE32

最後に、ガベージコレクションの方針、というドロップダウンメニューで、「最大ピークスループット (高 GC 停止時間)」と「低 GC 停止時間 (低ピークスループット」という 2 つの選択肢があり、今までは前者が選択されていましたが、後者を選択し、その他は 1 つ前と同じ設定で試してみます。

確認画面の内容を同様に抽出すると下記の様。GC のアルゴリズムが変わっています。並行マークスイープ (CMS) アルゴリズムを指定して、アプリケーションが受ける停止時間によるインパクトを減らすようにしていますね。

8 コア、2048 MB、GC による停止時間重視、Cool Threads 機でない
JVM オプション-Dcom.sun.enterprise.server.ss.ASQuickStartup=false
JVM オプション-XX:+UseConcMarkSweepGC
JVM オプション-XX:+UseParNewGC
JVM オプション-XX:LargePageSizeInBytes=2m
JVM オプション-XX:ParallelGCThreads=6
JVM オプション-Xmn1024m
JVM オプション-Xms2048m
JVM オプション-Xmx2048m
システムプロパティ - MAX_THREAD_POOL_SIZE32

以上のように見てきましたが、実際チューニングすることになるとこの Performance Advisor が提供する機能はかなり限定的で、これを使えば済む、というようなものではないものの、例えば パフォーマンスチューニングガイドを合わせて参照しながら、チューニング時の出発点として使うにはよいかも知れません。ご興味ある方はぜひ、使ってみて下さい。

About

ogino

Search

Categories
Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today