4

Tomcat 6 を使用して Web アプリケーションを実行しています。オープン JDK 6 を使用しています。AMD 64 ビット Ubuntu 11.04 サーバーです。

このコマンドでメモリダンプを採取します

jmap -dump:format=b,file=/home/demon/Desktop/mymemorydump.hprof 2762

メモリ ダンプは 4.5 GB です。Eclipse MAT を使用して分析したところ、強力な到達可能オブジェクトは 80 MB、到達不能オブジェクトは 335 MB でした.残りのダンプを分析する方法..

また、このプロセスによってサーバーで使用されるメモリは 4.5 GB です。現在、このメモリは通常の 1 GB レベルまで低下することはありません。そして、このメモリはゆっくりと 8 ~ 9 GB に増加し、Tomcat は応答を停止します (実際には、メモリ不足エラーは発生しません)。

私のTomcat設定は

/usr/lib/jvm/java-6-openjdk/bin/java -Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties -Djava.awt.headless=true -Xms1024m -Xmx6144m -XX:+UseConcMarkSweepGC -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/share/tomcat6/endorsed -classpath /usr/share/tomcat6/bin/bootstrap.jar -Dcatalina.base=/var/lib/tomcat6 -Dcatalina.home=/usr/share/tomcat6 -Djava.io.tmpdir=/tmp/tomcat6-tmp org.apache.catalina.startup.Bootstrap start
4

1 に答える 1

2

終了しないスレッドが過剰に作成され、スレッド リークが発生している可能性があります。各スレッドはスタック領域を割り当てますが、これは上には示されていません。Ctrl-\ (UNIX) (または Windows では Ctrl-Break) を押すと、すべてのスレッドのスタック トレースがダンプされます (端末がスクロールされないように、Tomcat の STDERR をリダイレクトする必要がある場合があります)。端末から Tomcat を起動しなかった場合は、Ctrl- ではなく「kill -QUIT YourPID」を使用してください。

また、jconsole (jdk bin ディレクトリ内) は、応答を停止する前に実行可能ファイルにアタッチできます。手に負えなくなる前に、スレッド (またはヒープ) のリークを表示できる場合があります。

于 2013-01-11T21:27:44.683 に答える