レポート¶
Resin にはシステムの状態をPDFレポートに出力する機能が含まれています。
レポートの取得¶
レポートを取得する簡単な方法は、コマンド「pdf-report」を使用することです。pdf-reportは直ちにレポートを生成するようにサーバへ要求します。
Linuxの例
> resinctl pdf-report
Windowsの例
> resin.exe pdf-report
自動的なPDFレポートの生成¶
PDFレポートは毎週生成されるようにhealth.xmlに設定できます。また、再起動などのイベント時に生成することも可能です。
<health:PdfReport>
<path>${resin.root}/doc/admin/pdf-gen.php</path>
<report>Summary</report>
<period>7D</period>
<snapshot/>
<mail-to>${email}</mail-to>
<mail-from>${email_from}</mail-from>
<!-- <profile-time>60s</profile-time> -->
<health:IfCron value="0 0 * * 0"/>
</health:PdfReport>
上の例では、スナップショットを作成して、PDFレポートを生成し指定したメールアドレスへ毎週レポートを送信します。
送信先のメールアドレスはresin.propertiesに記述します。
# Set the email address to receive weekly and restart PDF reports
email : admin@example.com
次の例では、watchdogよる再起動時にPDFファイルを生成します。
<health:PdfReport>
<path>${resin.root}/doc/admin/pdf-gen.php</path>
<title>Restart</title>
<watchdog/>
<mailto>user@example.com</mailto>
<health:OnRestart/>
</health:PdfReport>
レポートの概要¶
以下の内容がレポートに出力されます。
- サーバ環境の概要 - JavaVM、OS、Resinのバージョンなど
- ヘルスメーターのグラフ - レポートが出力されるまでの統計グラフ
- ヒープダンプ - ヒープメモリ使用量の上位
- CPUプロファイル - CPUプロファイルの最も活動的な位置
- スレッドダンプ - スナップショット取得時のResin内の全てのスレッド
- ログレポート - java.util.loggingから出力された最新の「warning」レベルのメッセージ
- JMXダンプ - スナップショット取得時の全てのJMX Mbeanデータ
レポートはいくつかの状況で使用するように設計されています。
- Resinのバグレポート - Resin自体のサポートのために、スナップショットがあれば問題の解決やデバッグが行いやすくなります
- 再起動やクラッシュの分析 - JavaVMが何らかの理由でクラッシュした場合、watchdogのレポートは、原因を突き止めるのに役立ちます
- CPUとパフォーマンス - JavaVMが予想外にCPUを使用した場合、レポートで主な原因を示すことができます
- スレッドのロック - スレッドダンプおよびCPUは、ロックされたコードを突き止めるために使用できます
ヘルスメーターのグラフ¶
レポートには、Resinの状態を表すヘルスメーターのグラフが含まれます。
各グラフの詳細について以下に示します。
Request Active¶
処理中のリクエストや接続に関する情報です。
60秒ごとの最大値が出力されます。
凡例 | 説明 |
---|---|
Request Active | アクティブなリクエスト数(リクエストの同時処理数) |
Request Suspend Active | レスポンスを返さずに、サーバ側で一時停止しているリクエスト数 |
Keepalive Thread Active | アクティブな Keepalive コネクション数 |
Keepalive Async Active | アクティブな JNI Keepalive コネクション数 |
Request Count¶
各接続について、 60秒ごとの合計値が出力されます。
凡例 | 説明 |
---|---|
Request Count | 受け付けたリクエスト数 |
Request Suspend Count | 切断されたリクエスト数 |
Keepalive Thread Count | 生成された Keepalive コネクション数 |
Keepalive Async Count | 生成された JNI Keepalive コネクション数 |
Session Save Count | 生成された HttpSession 数 |
Request Time (ms)¶
リクエストの処理時間、つまり Resin がリクエストを受け付けてからレスポンスを返すまでにかかった時間(ミリ秒)です。60秒ごとの平均値が出力されます。 Request Time Max は、60秒間における最大値が出力されます。
Request Errors¶
エラー扱いとなったリクエスト数をHTTPステータスコード別で示します。60秒ごとの合計値が出力されます。
JVM Memory¶
Javaヒープの使用状況を表します。
凡例 | 説明 |
---|---|
Heap Memory Used | 使用済みのメモリ
※java.lang.Runtime#totalMemory() を利用します。
|
Heap Memory Free | 使用可能な空きメモリ
※java.lang.Runtime#freeMemory() を利用します。
|
Tenured Memory Used | OLD領域の使用量 |
Tenured Memory Free | OLD領域の空き容量 |
Physical Memory¶
Physical Memory Free は、OSの物理メモリの空き容量です。
※com.sun.management.OperatingSystemMXBean#getFreePhysicalMemorySize())を利用します。
Swap Free は、スワップ領域の空き容量です。
File Descriptors¶
File Descriptor Count は、ファイルディスクリプタ数です。計測が行われたときの値が出力されます。
ファイルやネットワークアクセスが多い場合に上昇することがあります。
Class Loading¶
Loaded Classes は、ロードされたクラス数です。
Compilation Time は、コンパイルに費やされた時間(ミリ秒)です。
JVM Threads¶
JVMスレッドの状態を示します。計測が行われたときの値が出力されます。
凡例 | 説明 |
---|---|
JVM Thread Count | JVMのスレッド総数 |
JVM Runnable Count | 実行中のスレッド総数 |
JVM Blocked Count | ブロックされ、モニターロックを待機しているスレッド総数 |
JVM Native Count | Java Native Interface を使用してネイティブコードを実行しているスレッド総数 |
JVM Waiting Count | 他のスレッドが特定のアクションを実行するのを待機しているスレッド総数 |
Resin Thread Pool¶
Resin 上で管理されているスレッドの状態を示します。
凡例 | 説明 |
---|---|
Thread Count | スレッドの総数 |
Thread Active Count | アクティブなスレッドの総数 |
Thread Wait Count | スレッドを待っている要求の総数 |
Thread Overflow Count | オーバーフローを使用して作成されたスレッドの総数 |
Thread Starting Count | 現在開始しているスレッドの総数 |
Resin Task Queue¶
Resinのスレッドプールに空きが無く、あふれたタスクの数です。
非同期タスクを実行するとき、Resin はスレッドプール内のアイドル状態のスレッドにディスパッチします。
アイドル状態のスレッドが少ない場合は新しいスレッドを作成します。
新しいスレッドが作成される前に次のタスクが到着すると、タスクキューに一時的に入れられます。
Database Connection Active¶
Connection Count は、使用されたデータベース接続の数です。
Connection Active は、データベース接続の総数(アクティブな接続+アイドル状態の接続)です。
Database Query Time (ms)¶
データベースに処理を依頼してから応答を受け取るまでの時間(ミリ秒)です。
Query Time は、60秒ごとの平均値、Query Time Max は 60秒間における最大値が出力されます。
Database Query Count¶
データベースクエリ数です。60秒間の合計値が出力されます。
ヒープダンプ¶
ヒープダンプは、システムのメモリ割り当ての概要を示します。異常なメモリ配分のチェックに活用できます。
ヒープダンプはオブジェクト自身のサイズとその子孫のサイズで「self+desc」の順にソートされます。例えば、java.lang.Stringは、その「self+desc」の一部として、char[]が含まれます。
以下の例は、一般的なアイドル状態のResinのヒープダンプです。
Class Name self+desc self count
byte[] 22.23M 22.23M 14741
com.caucho.db.block.Block 20.28M 134.9K 2410
char[] 13.89M 13.89M 122606
com.caucho.util.LruCache 7.52M 30.4K 317
java.lang.String 7.15M 1.97M 61426
..
最初にあるbyte[]とBlockは、主にResinの内部プロキシーキャッシュと分散キャッシュ·データベースです。Blockは「self」の方がはるかに小さいことに注意してください。 これは各Blockの「self+desc」が、大きなbyte[]バッファを持っているためです。
同様に、char[]バッファを含んでいるため、java.lang.Stringの「self+desc」は「self」よりもはるかに大きくなります。
クラスローダーのヒープダンプ¶
ヒープダンプには、クラスローダのメモリ使用量を個別に表示する項目があります。
クラスに基づいたメモリリークを確認するためにこのレポートを使用できます。
スレッドダンプ¶
CPUに関する問題やスタックスレッドの場合、スレッドダンプを確認すれば各スレッドがシステムになにを行っているかを確認できます。
いくつものスレッドが異常な個所で連なりロック状態になっているかをレポートから追跡できます。
スレッドダンプのレポートは、同様のスタックトレースを有しているスレッドをマージします。マージされたスレッドはまとめてリスト表示されます。
ブロックされたスレッドとロックを保持しているスレッドがグループ化されているので、スレッドが継続してから多数のスレッドを妨げているかを確認する方が簡単です。
以下の例は正常なブロック状態を示しています。JDKのSSL実装は1つのスレッドのみ接続を受け入れ、他のすべてのスレッドは最初のスレッドを待ちます。
この場合「http://*:8444-17」という名前のスレッドがSocksSocketImplを所有しています。 3つのスレッドはロックのため並んで待機しています。(「http://*:8444-1」、「http://*:8444-10」、「http://*:8444-11」)
http://*:8444-17
java.net.PlainSocketImpl.socketAccept
-- locked java.net.SocksSocketImpl@1199747469
java.net.PlainSocketImpl.accept
java.net.ServerSocket.implAccept
...
com.caucho.env.thread.ResinThread.runTasks
com.caucho.env.thread.ResinThread.run
http://*:8444-1
waiting on java.net.SocksSocketImpl@4782b18d owned by [126] http://*:8444-17
http://*:8444-10
waiting on java.net.SocksSocketImpl@4782b18d owned by [126] http://*:8444-17
http://*:8444-11
waiting on java.net.SocksSocketImpl@4782b18d owned by [126] http://*:8444-17
java.net.PlainSocketImpl.accept
java.net.ServerSocket.implAccept
com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept
...
com.caucho.env.thread.ResinThread.runTasks
com.caucho.env.thread.ResinThread.run
...
CPUプロファイル¶
Resinの制限により、CPUプロファイルをPDFレポートに出力することはできません。
PDFレポートの「CPU Profile」には「A CPU profile was not generated during the selected timeframe.」と記述されます。
ロギング¶
最新の警告ログが出力されます。
Log(Warning)
2011-09-21 11:06:07 warning WarningService: Resin restarting due to
configuration change
JMXダンプ¶
JMXダンプはシステム内のすべてのJMX MBeanとその値を出力します。
JMX Dump
JMImplementation:type=MBeanServerDelegate
ImplementationName Resin-JMX
ImplementationVendor Caucho Technology
ImplementationVersion Resin-4.0.s110921
MBeanServerId Resin-JMX
SpecificationName Java Management Extensions
SpecificationVendor Sun Microsystems
SpecificationVersion 1.4
com.sun.management:type=HotSpotDiagnostic
...