我们有一个
Java webapp,我们从
Java 1.5.0.19升级到Java 1.6.0.21
/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最大设置.使用top我看到:
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
那么JVM怎么能有3GB堆,256MB的permgen,甚至一些开销消耗6.9GB?通过升级到#35将修复的JVM中的Bug?在java中可能会使用额外的内存的东西丢失了吗?只是想看看有没有人看过这个.
解决方法
原文地址:https://www.jb51.cc/jvm/126108.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。