C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: Javaのメモリ使用状況に関して


(過去ログ 168 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■97256 / inTopicNo.1)  Javaのメモリ使用状況に関して
  
□投稿者/ 川西 (1回)-(2021/04/19(Mon) 19:03:14)

分類:[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つの詳細を追ってみたのですが、原因の特定が出来ていません。


このような状況の場合においての調査方法等ありましたら
ご教授お願い致します。



引用返信 編集キー/
■97287 / inTopicNo.2)  Re[1]: Javaのメモリ使用状況に関して
□投稿者/ ニケ (18回)-(2021/04/21(Wed) 17:53:29)
No97256 (川西 さん) に返信
メモリリークに限らず、デバッグの基本は全プログラム
コメントアウトの状態から、どのコマンドを実行すれば
その現象が起こるのか、1文1文追加して調べるだけじゃ
ないのか?
引用返信 編集キー/
■97314 / inTopicNo.3)  Re[1]: Javaのメモリ使用状況に関して
□投稿者/ キングダム (1回)-(2021/04/25(Sun) 22:51:48)
No97256 (川西 さん) に返信

メモリーリークはアプリで使用してないけど解放されないメモリが存在するってことだと思いますが
投稿内容からはメモリリークと判断した根拠がよくわかりませんでした

スレッドが266あるってことはそれだけ接続されてるってことじゃないかなと
それなら初期状態と比較してあるていどメモリ使用していても正常な範囲だと思うんですよねー

メモリがGCで回収されてないだけかもしれないのでGC直後のメモリ使用量を見て
妥当かどうか考えたがいんじゃないかなと思います

VisulaVMを使えばJMXでTomcatのプロセスにアクセスしてGC実行できます
https://visualvm.github.io/

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -