Java1.5.0.19からJava1.6.0.21にアップグレードしたJavaWebアプリがあります。
/usr/java/jdk1.6.0_21/bin/java -server -Xms2000m -Xmx3000m -XX:MaxPermSize=256m -Djava.awt.headless=true -Dwg.environment=production -Djava.io.tmpdir=/var/cache/jetty -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=31377 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/webapp -Dprogram.name=run.sh -Djava.endorsed.dirs=/opt/3p/jboss/lib/endorsed -classpath /opt/3p/jboss/bin/run.jar:/usr/java/jdk1.6.0_21/lib/tools.jar org.jboss.Main -c default
ご覧のとおり、2GBのヒープを事前に割り当て、最大で3GBにする必要があります(このアプリが古く、設計が不十分であるため、大量の負荷がかかるため、事前に割り当てる必要があります)。1.6にアップグレードした後に最近見た問題は、メモリが屋根を通過することがあるということです。メモリ使用量はアプリの問題である可能性がありますが、JVMはヒープの最大セットアップ3GBを超えています。トップを使用すると、次のようになります。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8449 apache 18 0 19.6g 6.9g 5648 S 4.0 84.8 80:42.27 java
では、ヒープが3GB、permgenが256MB、オーバーヘッドがいくらかあるJVMで6.9GBを消費するにはどうすればよいでしょうか。ビルド#35にアップグレードすることで修正されるJVMのバグ?Javaで何が不足しているのか、余分なメモリを使用している可能性がありますか?誰かがこれを以前に見たことがあるかどうかを確認しようとしています。