intra-mart Accel Platform 設定ファイルリファレンス 第34版 2024-04-01

レポート

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秒ごとの合計値が出力されます。

Load Avg

Unix OS の /proc/loadavg に出力されている実行可能なプロセス数です。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
  ...