IBM 現場SEのITな日々

IBM現場SEが日々駆使している技術、現場SEの経験・知見を綴るブログです

(前田)[初心者向け] WAS Liberty お役立ち情報・・・性能情報取得

0. はじめに
WAS Liberty は2012年にリリースした WAS V8.5 から新しく提供されたランタイムです。
従来の WAS traditional と比べて軽量なランタイム、高速な起動、シンプルなサーバー構成といった特徴があります。
近年、WAS Liberty の採用が増えてきているため、WAS tratitional とは異なる WAS Liberty に関するお役立ち情報を書きたいと思います。今回は WAS Liberty の性能情報を取得する方法です。


1. モニター設定
WAS Liberty で性能情報を取得するには monitor フィーチャーの定義と、モニターしたいコンポーネント対象を server.xml に定義する必要があります。
monitor-1.0 フィーチャーで取得できるコンポーネントは下記のとおりです。

 

JVM
Heap: 現行 JVM に使用されているヒープサイズ
FreeMemory: 現行 JVM に使用可能な空きヒープ
UsedMemory: 現行 JVM の使用済みヒープ
ProcessCPU: JVM プロセスで使用された CPU のパーセンテージ
GcCount: JVM の始動以降に GC が行われた回数
GcTime: GC 時間の合計累算値
UpTime: JVM の始動以降の時間 (ミリ秒単位)

 

・ThreadPool
ActiveThreads:要求を処理中のアクティブスレッド数
PoolSize:スレッドプールサイズ
PoolName (Default Executor スレッドプールのみをサポートします)

 

・Web アプリケーション
AppName: アプリケーションの名前
ServletName: サーブレットの名前
RequestCount: このサーブレットに対するヒット数
ResponseTime: 平均応答時間 (ナノ秒)
Description: カウンターの説明
RequestCountDetails: 最終タイム・スタンプなど、RequestCount の詳細
ResponseTimeDetails: 取得したスナップショットの数、最小値、最大値など、ResponseTime の詳細

 

JAX-WS
AvgResponseTime: 平均応答時間 (ミリ秒)
MaxResponseTime: 最大応答時間 (ミリ秒)
MinResponseTime: 最小応答時間 (ミリ秒)
NumInvocations: このエンドポイントまたは操作への呼び出しの数
NumChekedApplicationFaults: 検査されたアプリケーション障害の数
NumLogicalRuntimFaluts: 論理実行時障害の数
NumRuntimeFaults: 実行時障害の数
NumUnCheckedApplicationFaults: 未検査のアプリケーション障害の数
TotalHandlingTime: 合計応答処理時間 (ミリ秒)

 

・セッション
CreateCount: 作成されたセッションの総数
LiveCount: ライブ・セッションの総数
ActiveCount: アクティブ・セッションの総数
InvalidatedCount: 無効化されたセッションの総数
InvalidatedCountbyTimeout: タイムアウトにより無効化されたセッションの総数

 

・ConnectionPool
CreateCount: 作成された接続の総数
DestroyCount: 破棄された接続の総数
ManagedConnectionCount: 使用中の ManagedConnection オブジェクトの数
WaitTime: 接続が認可されるまでの平均待ち時間 (ミリ秒)
ConnectionHandleCount: 使用中の Connection オブジェクトの数
FreeConnectionCount: プール内の空き接続の数

 

設定方法
(1) monitor フィーチャーの定義
server.xml に monitor フィーチャー定義を追加します。
<featureManager>
 <feature>monitor-1.0</feature>
</featureManager>

 

(2) モニターしたいコンポーネントの定義
<すべてのコンポーネントをモニターしたい場合>
デフォルトは server.xml に monitor エレメントが定義されていないため、monitor-1.0 フィーチャーでモニターされているコンポーネントはすべてモニターされます。

 

<一部のコンポーネントをモニターしたい場合>
一部のコンポーネントをモニターしたい場合は、モニターしたいコンポーネントを monitor エレメントにて定義します。

例:JVM、ThreadPool、ConnectionPoolをモニターしたい場合
<monitor filter="JVM,ThreadPool,ConnectionPool" />

 

 以上でモニター設定は終了です。

 

参考情報:
https://www.ibm.com/support/knowledgecenter/ja/SSEQTP_8.5.5/com.ibm.websphere.wlp.doc/ae/twlp_mon.html


2.モニター情報の取得
モニター設定完了後、モニターされている値を確認する方法ですが、今回は curl コマンドを利用した方法を記述します。
curl コマンドでモニター情報を取得するためには、アプリケーションサーバーへ restConnector 構成、SSL 構成、管理者ロール構成を行います。

 

設定方法
(1) restConnector 構成
server.xml に restConnector フィーチャー定義を追加します。

<featureManager>
 <feature>restConnector-1.0</feature>
</featureManager>

 

(2) SSL 構成
①server.xmlssl フィーチャー定義を追加します。

<featureManager>
 <feature>ssl-1.0</feature>
</featureManager>


②server.xml に鍵ストア・サービス・オブジェクト・エントリーを追加します。
keyStore エレメントは defaultKeyStore と呼ばれ、鍵ストア・パスワードを含んでいます。
パスワードは平文で入力することも、securityUtility encode オプションを使用してパスワードをエンコードすることもできます。
一番シンプルな構成は下記のとおりです。
<keyStore id="defaultKeyStore" password="keystorepassword" />

 

この構成で鍵ストアと証明書が存在しない場合、アプリケーションサーバーは SSL の初期化中に自動で鍵ストアを作成します。
デフォルトで作成した鍵ストアは有効期限が 365 日となるため、有効期限を延ばしたい場合は securityUtility encode オプションを利用して、鍵ストアを手動で作成してください。

 

アプリケーションサーバー作成時にデフォルトで server.xml にhttpEndpoint エレメントが定義されます。httpEndpoint エレメントに httpsPort が定義されていることを確認します。

例:
<httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" httpsPort="9443">

 

(3) 管理者ロール構成
管理者ロールの定義方法はいくつかあります。
以下はquickStartSecurity エレメントを利用した一番シンプルな構成の設定例です。
<quickStartSecurity userName="username" userPassword="userpassword" />

 

参考情報:
https://www.ibm.com/support/knowledgecenter/ja/SSEQTP_8.5.5/com.ibm.websphere.wlp.doc/ae/twlp_admin_restconnector.html

 

アプリケーションサーバーへの設定が完了したら、実際に curl コマンドでモニターされているデータを取得してみます。

 

curlコマンド

curl -s -u username:userpassword -k https://hostname or IPaddress:WAS https port番号/IBMJMXConnectorREST/mbeans/ObjectName/attributes/属性

 

上記コマンドでモニターされている情報を取得します。

例として下記にThreadPoolのPoolSizeを取得する場合とConnectionPoolのCreateCountを取得する場合を記載します。

 

例1:ThreadPoolのPoolSizeを取得する場合

■実行コマンド例
curl -s -u admin:password-k https://localhost:9443/IBMJMXConnectorREST/mbeans/WebSphere%3Atype%3DThreadPoolStats%2Cname%3DDefault%20Executor/attributes/PoolSize

※補足

username=admin
userpassword=password
hostname=localhost(ローカルで実行する場合)
WAS https port番号=9443
ObjectName=WebSphere:type=ThreadPoolStats,name=Default Executor (":"(コロン)=%3A、"="(イコール)=%3D、","(カンマ)=%2C、" "(スペース)=%20・・・UTF8の16進数表記)
属性=PoolSize

 

■出力結果例
{"value":"50","type":"java.lang.Integer"}

 

例2:ConnectionPoolのCreateCountの場合

■実行コマンド例
curl -s -u admin:password-k https://localhost:9443/IBMJMXConnectorREST/mbeans/WebSphere%3Atype%3DConnectionPoolStats%2Cname%3Djdbc%2FTESTDB/attributes/CreateCount

 ※補足

username=admin
userpassword=password
hostname=localhost(ローカルで実行する場合)
WAS https port番号=9443
ObjectName=WebSphere:type=ConnectionPool,name=jdbc/TESTDB (":"(コロン)=%3A、"="(イコール)=%3D、","(カンマ)=%2C、"/"(スラッシュ)=%2F・・・UTF8の16進数表記、JNDI名がjdbc/TESTDBの場合)
属性=CreateCount

 

■出力結果
{"value":"1","type":"java.lang.Long"}

 

定期的にモニターされている情報をテキストファイル等へ書き出したい場合は、スクリプト等を作成して、valueの値を書き出してください。