|
分類:[Java]
Javaのメモリ使用状況に関して質問させてください。
OS:Linux(Red Hat 4.8.3-9)をvm上でメモリ1GB起動
Apache+Tomcat:Apache Tomcat/8.5.20
java:1.8.0_121
上記構成にてクライアントからの依頼を受け付け
別サーバに処理を依頼するサーブレットを作成してします。
何日間か連続稼働させているとメモリの状況が以下のように
なりました。(増え方としては徐々に右肩上がりになっている感じです。)
初期状態
free:1,400,000
swap 1,050,000
計測完了時(6日後)
free:1,180,000
swap 1,230,000
メモリリークの疑いがあると思いましたので、
jconsoleにて「Heap Memory Usage」「Non-Heap Memory Usage」
を確認した所
「Heap Memory Usage」は20MBから80MBの右肩上がりその後40MBに
一気に下がるような動きとなっています。
「Non-Heap Memory Usage」は60MBから73MB右肩上がり
上がり続けています。
また「eclipse Memory analyzer」を使用して
メモリリークの疑いがあるものをピックアップ
すると以下の3つでした。
・One instance of "com.sun.jmx.remote.internal.ArrayNotificationBuffer"
loaded by "<system class loader>" occupies 8,996,264 (24.11%) bytes.
The instance is referenced by org.apache.tomcat.util.modeler.BaseNotificationBroadcasterEntry
@ 0xf6d9c8d0 , loaded by "java.net.URLClassLoader @ 0xf59d5e20".
The memory is accumulated in one instance of "java.lang.Object[]",
loaded by "<system class loader>", which occupies 8,996,048 (24.11%) bytes
・266 instances of "org.apache.tomcat.util.threads.TaskThread",
loaded by "java.net.URLClassLoader @ 0xf59d5e20" occupy 12,879,768 (34.52%) bytes.
・5,274 instances of "java.lang.Class",
loaded by "<system class loader>"
occupy 6,201,736 (16.62%) bytes.
上記3つの詳細を追ってみたのですが、原因の特定が出来ていません。
このような状況の場合においての調査方法等ありましたら
ご教授お願い致します。
|