開発ヒント

  • システムがレスポンスを返さなくなる現象の原因究明
  • jpsコマンドでJavaプロセスの確認(psコマンドでもいい)
  • jstackコマンドでスレッドダンプを取得(「kill -3」でもいい)
  • とりあえずWARNING状態のコネクションプールが多数あり、開放漏れが原因であろう
  • 特にコネクション取得のメソッド「GenericObjectPool.borrowObject」で、つまり開放待ちでとまっている
  • (スレッドが停止している付近のみの)ソースを見たけど見つけられなかった
  • FindBugsにかけたらクローズ漏れを数箇所特定でき、修正したら少しはましになった。がまだ残ってる
  • コネクションプールのリーク検出機能を試したところ、開放漏れを起こしている箇所が判明
  • その部分のソースを調査したところ例外時にクローズしていないことがわかり、その部分を修正し問題は解消できた
  • フレームワークのDAO機能を利用すると、開発者がクローズを意識しなくてもよくなり開放漏れは無くなるよ

分散開発のABC(前編) コレだけ準備すれば分散開発に失敗しない

バージョン表記に関する豆知識。一度は読んでおきたい。