2002-07-10 (Wed) [長年日記]
▲ 帰宅すると
玄関前で三毛猫が待っててくれた!
▲ BEA Developers Conference 2002
ここ二日ほど参加。すでに話題の中心は新技術、新機能よりも保守、運用、適用範囲の拡大、開発プロセスに向いているようだ。収穫をつらつらメモ。
▲ JRockit
Intelプラットフォーム最強 JavaVM。いつでもJITがON(つまりインタプリタモードが無い)。JavaスレッドをOSネイティブスレッドにマップ可能。Hot-Spotは適宜検出して積極的に最適化リコンパイル。サーバサイド向けに最適化(メモリマネージ、スレッドマネージ、IOに比重が置かれる)。Windows と Linuxに対応。新 Core になった Intel の Xeon のハイパースレディングとの組み合わせが最強。
▲ WebLogic Internals
WebLogicServerのスレッドアーキテクチャ。Listenスレッド(非SSL/SSL)がソケットを開いてコネクションを待ち、accept した接続を Socket リーダースレッドへ渡す。Socketリーダーは接続を適切な実行キューへと振り分ける。
Listenスレッド>Socketリーダスレッド>実行スレッド(実行キュー)
- 実行キュー
- 管理用RMIキュー … APがハングしても管理の続行を可能にするため専用キューが用意される。管理サーバ、管理対象サーバ間のインタラクション。JMXクライアント、weblogic.Admin
- 管理コンソール用 HTTP キュー
- レプリケーションキュー … クラスタ環境でのレプリカ。HTTPセッション、ステートフルセッションBean。
- マルチキャストキュー … クラスタ環境でのマルチキャスト処理。ハートビート、クラスタワイドJNDI。
- JMSディスパッチャキュー … JMSのフロントエンド、バックエンド処理
- 非同期トランザクションキュー … トランザクションの実行を調整(XAプロトコル)。2フェーズコミット実行。
- デフォルトキュー … すべてのユーザーリクエスト(T3,HTTP,RMI,IIOP,Web Services)。Socketリーダ。タイマージョブ(ユーザー定義はdeprecated)。
- 内部スレッド
- Listenスレッド
- Application Pollerスレッド … 開発者モードのみで存在。開発中のアプリケーションファイルの更新を監視。開発者モードはこのスレッドのために負荷が高い。
- Transaction Timeout スレッド … タイムアウトしたトランザクションを定期的にロールバック。
- MultiCastソケットリーダスレッド … 分散環境で必要。マルチキャストデータを受信。
- Socketリーダスレッド … Pure-Java 実装とネイティブ実装を選択できる。通常ネイティブ実装にするべき(WebLogicもネイティブなとこあるんだな)。
- Timer High Priority スレッド … 高優先度のタイマジョブ実行、ハートビートとか
- Timer Low Priority スレッド … 低優先度のタイマジョブを実行
▲ スレッドダンブ
ハングの解析に有効
- UNIX: kill -3(SIGQUIT)をプロセスに送る
- Windows: CTRL-Break (NTサービスとして起動していると不可能)
- 間隔を空けて複数回採取する
% ./startWebLogic.sh > console.log 2>&1
▲ ユーザー定義の実行キュー
ミッションクリティカルなアプリケショーションに専用の実行キューを用意してスループットを向上させることができる。デットロック対策にもなる場合もある。欠点はIdelスレッドが増加することと、スレッドダンプが複雑化すること。
config.xmlにて<ExecuteQueue>でキューを作成。web.xmlでサーブレットに割り当てたり、ejbc で所定の EJB にユーザー定義実行キューを結びつけることができる。
▲ スレッド関連トラブル
JDBCのDriverManager#getConnectionはデットロックの危険性あり。使用しない。JNDIからのDataSourceを推奨。
▲ ヒープが十分あるのにOutOfMemoryErrorが発生
1.3.x以上の VM なら Permanent Generation不足の可能性あり。Permanent Generation とは GC されないオブジェクトに割り当てられるメモリ領域。サーバサイドシステムでは肥大化する傾向がある。
▲ java weblogic.i18ntools.CatInfo
指定のIDのエラーメッセージを出力してくれる。日本語のエラー番号から英語のエラーメッセージを出力させて AskBEA などで検索できる。6.1でも使える。
関連しそうなツールです。スレッドダンプの解析やヒープ容量/GCのチューニングにどうぞ。<br>http://yusuke.homeip.net/samurai/