レポート¶
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は、ロックされたコードを突き止めるために使用することができます
ヒープダンプ¶
ヒープダンプは、システムのメモリ割り当ての概要を示します。異常なメモリ配分のチェックに活用することができます。
ヒープダンプはオブジェクト自身のサイズとその子孫のサイズで「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
...