我有一个在 Jboss 5.1 中运行的应用程序,它每隔一周就会出现性能问题,我们必须重新启动应用程序以使其恢复正常。上图是在应用程序在高峰时段运行时捕获的。我试图从应用程序的角度了解在查看其他领域(如基础设施和网络)之前是否有改进的余地
这是我为此应用程序获得的堆大小设置
JAVA_OPTS="${JAVA_OPTS} -Xms3072m -Xmx6144m -XX:PermSize=512m -XX:MaxPermSize=2048m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.lang.ClassLoader.allowArraySyntax=true "
JAVA_OPTS="$JAVA_OPTS -verbose: gc -Xloggc:/test/log/gc.log -XX: +PrintGCDetails -XX:+PrintGCDateStamps"
- 为什么从图表中,应用程序仅使用 3G 内存,即使我已将 6G 作为最大内存?
- 我的 GC 设置是否正确?我可能从不同的服务器复制,我如何确保我有正确的 GC 设置这个应用程序?
- GC是否发生得太频繁了,如果我从设置中删除时间间隔,它将如何确定GC何时必须运行?
- 上次我们不得不重新启动应用程序并将其加载到 jvisualvm 时,我进行了堆转储,但我不知道在堆转储中寻找什么(我不是开发人员)有人能告诉我在堆转储中寻找什么以及如何改进它
- 从图表和 GC 设置中看到的内容,我们还能做些什么来提高应用程序性能