gpt4 book ai didi

java - 如何解决 JBoss 中的 OutOfMemoryError 错误?

转载 作者:行者123 更新时间:2023-12-02 07:55:33 25 4
gpt4 key购买 nike

我在 JBoss 6 上运行的 Java EE 6 应用程序最近开始出现内存问题。

情况

  • 生产服务器。
  • 使用 JPA2/Hibernate 和默认缓存设置的中小型应用程序。约 170 个类(class)。
  • 数据库大小约为 1.8GB,其中 90% 属于二进制数据,只需由 servlet 获取,无需任何特殊缓存。
  • session 超时最近从 2 小时增加到 10 小时。
  • JVM 配置:-Xrs -Xms1024M -Xmx1024M -XX:MaxPermSize=512M -Dsun.rmi.dgc.client.gcInterval=3600000 -server
  • JBoss 作为服务运行。
  • ViewScope 中的几乎所有 Controller 类

考虑到这些事实,提出两个问题:

  • 我该如何解决这些 OOME 问题? JConsole 找不到作为服务运行的 JVM。理想情况下,我必须能够检查相关对象(例如 session )才能找到内存窃贼。

  • 考虑到增加的 session 超时,这个 OOME 是否合法,解决方案只是增加堆大小?该应用程序自 2011 年 9 月以来一直在使用,之前没有出现任何内存问题。大约两个月前, session 超时大幅增加。

最佳答案

session 在 JBoss 中使用一定量的内存似乎是合乎逻辑的。增加 session 超时可能会导致内存中随时出现更多 session - 因此您可能会增加应用程序的内存需求。

最简单的(初始)解决方案是增加应用程序的堆分配。例如,设置 -Xmx2g (这会将 JVM 内存加倍至 2 GiB - 您当前的设置为 1 GiB)。显然,您的系统应该有足够的可用物理内存。

如果这只是延迟了您的 OOME,您将需要分析您的堆。启用:

-XX:-HeapDumpOnOutOfMemoryError

这将创建堆的物理转储,以供分析。您可能会发现存在内存泄漏,或者只是每个应用程序 session 都有一定的内存占用 - 然后限制 session 或增加内存分配以适应。

关于java - 如何解决 JBoss 中的 OutOfMemoryError 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9704881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com