Jboss应用程序性能不佳

时间:2016-07-19 22:14:20

标签: java garbage-collection jboss5.x heap-size

我有一个在Jboss 5.1中运行的应用程序,并且每隔一周都会出现性能问题,我们必须重新启动应用程序才能恢复正常。当应用程序在高峰时段运行时,会捕获上面的图表。我在尝试了解在查看其他区域(如基础架构和网络)之前是否存在从应用程序角度进行改进的空间

Graph generated through jvisualvm which shows heap usage

这是堆大小设置 我有这个应用程序

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"
  1. 为什么,从图表来看,应用程序甚至只使用3G内存 虽然我已经给了6G作为最大记忆?
  2. 我的GC设置是否正确?我可能从不同的地方复制过 服务器,我如何确保我有正确的GC设置 应用
  3. 如果我删除了时间间隔,那么GC是否会频繁发生 设置如何确定GC何时运行?
  4. 上次当我们不得不重新启动应用程序时,我进行了堆转储 把它加载到jvisualvm但我不知道在堆中寻找什么 dump(我不是开发人员)有人能说出在堆中寻找什么 转储以及如何改进它
  5. 我们还有什么办法可以改善申请 我们在图表和GC设置中看到的表现

1 个答案:

答案 0 :(得分:0)

以下是我的最佳能力回答:

  1. 暂时,你的应用程序很满意3GB的堆,不需要增加它。据推测,它会在每隔一周失败之前就这样做。
  2. GC性能调整就是答案。只有在您知道调整后,才需要监控和调整。然后测量,记录。冲洗并重复。
  3. 它将在需要时运行GC(当它的Young Generation空间不足时)。它可以测量很多东西并考虑各种设置来决定什么时候到GC。它会在没有任何帮助的情况下发生,但你可以告诉它更多的全局图片,GC正试图建立以便自我调整。
  4. 您可以通过多种方式切片和切块。这一数量的信息产生了许多观点。您可以查看哪些类使用大多数内存,这可以指示问题所在(我假设内存泄漏或某些其他系统资源,如文件句柄未被释放)。见for basic use of VisualVM
  5. 您需要知道导致问题的原因。通常最好的办法是修复有问题的应用程序,而不是将负担转移到GC。如果你有资源泄漏,无论如何它迟早会打到你。