24時間稼動し続ける多重スレッド制御のJavaアプリなんです。
HeapWatcherやGCViewer経由だと特にリークの兆候が見られず、"ps aux"コマンドによるJVMプロセス単位で計測するとリーク状態を引き起こしているため調査したところ、JVMプロセス経由はJavaHeap領域とNativeHeap領域を含めた値を出力しているように見受けられました。なので、各メモリー状態の推移を切り分けて測定したところ、NativeHeap領域を食いつぶしていることが発覚しました。
まだ確証を得ていませんが、リークの原因は、TYPE2経由でのDB接続の際、アプリの参照状態が残り続けているせいで、NativeHeap領域を食い潰しているようです。(一応、connection、statemant、result、metaなどclose後にnullを設定してるんですが、開放されているようには見受けられませんでした)ちなみに、NativeHeap領域に作業領域を持たないPureJavaのTYPE4接続だと、リークの兆候は見られず一定量を推移し続けています。このあたりの問題箇所の切り分けにえらく苦労しました。いやはや。
後々のためにこの場を借りてフィードバックしておきますと、GCが発生してもJavaHeap領域だけが開放対象でNativeHeap領域は対象外とか、コマンドラインオプションで、Heapサイズの初期値「-Xms」、最大値「-Xmx」を指定しても、効果あるのはJavaHeap領域のみなど、非常に興味深い事実が色々発覚しました。うーむ。


とまぁこんな感じで、一応真面目に仕事してるんですよう。
皆で担ぐべき御輿にただのっかかっていることなかれ。ノーモア、社内ニート