Jetty webapp 继续增长到heap space: (OutOfMemoryError Java heap space)
Jetty webapp continues to grow into heap space: (OutOfMemoryError Java heap space)
我的 Jetty webapp (9.3.6) 内存泄漏(java.lang.OutOfMemoryError: Java heap space
错误)。
版主的快速说明,这不是 PermGen 问题,似乎有解决方案。我尝试了一些 SO 搜索,但在任何相关问题中似乎都没有问到这个问题。
这是一个 websocket 应用程序,我正在使用 JVisualVM 对其进行分析,我看到有大量的字符串被分配但从未被删除,我不知道如何或如何删除解决那个问题。此外,我看到 org.eclipse.jetty.websocket.server.WebSocketServerFactory#1
和
org.eclipse.jetty.webapp.WebAppClassLoader#1
规模稳步(迅速?)增长。为了解决这个问题(或者我认为)我阅读了 Jetty here 中的内存管理页面并将 AppContextLeakPreventer
添加到我的 ${jetty.home}/etc/jetty.xml
并且这也没有帮助(发现我重做我的堆转储)。
处理 Jetty 网络应用程序中不断增长的堆的正确方法是什么?目前,我是预生产阶段,所以我不会热部署服务器。我还将堆大小增加到 -Xmx256M
(它是一个 1GB RAM AWS 实例,所以这里没有多少活动空间)。
目前我的客户端应用程序数量很少,我主要观察使用 JVisualVM 不断增长的内存配置文件。
欢迎任何意见。任何关于弄清楚 类 到底是什么导致了这种情况的指示也很受欢迎。我目前从 summary/inspect 选项卡的 "Biggest objects" 部分的堆转储中获得了上述信息。
(编辑,02/15)
在意识到这可能是 Jetty 9.3.6 中的错误后,我添加了一些测试说明(参见 http://dev.eclipse.org/mhonarc/lists/jetty-users/msg06666.html)。我想补充一点,我当前用于此分析工作的测试环境正在使用 shell 脚本快速连续启动 Java 客户端会话(即,不描述生产环境,但这显然生产环境也是一个问题)。只有三个 shells,但他们每隔 5 秒左右就会连续不断地向 websocket 服务器发射一个全新的客户端会话(但他们会在再次执行之前关闭连接)。
我确认转移到 Jetty 9.3.7 解决了这个问题;我相信我遇到的堆 space 问题与 here 中描述的错误(和修复)有关。
具体来说,Jetty 9.3.6(可能还有 Jetty 9.3.5)存在一个错误,它没有正确清理 Jetty 服务器上的 JSR356(客户端)会话对象,导致内存不足客户端经常重新连接(或客户端太多)的应用程序泄漏。
希望这对某人有所帮助。
我的 Jetty webapp (9.3.6) 内存泄漏(java.lang.OutOfMemoryError: Java heap space
错误)。
版主的快速说明,这不是 PermGen 问题,似乎有解决方案。我尝试了一些 SO 搜索,但在任何相关问题中似乎都没有问到这个问题。
这是一个 websocket 应用程序,我正在使用 JVisualVM 对其进行分析,我看到有大量的字符串被分配但从未被删除,我不知道如何或如何删除解决那个问题。此外,我看到 org.eclipse.jetty.websocket.server.WebSocketServerFactory#1
和
org.eclipse.jetty.webapp.WebAppClassLoader#1
规模稳步(迅速?)增长。为了解决这个问题(或者我认为)我阅读了 Jetty here 中的内存管理页面并将 AppContextLeakPreventer
添加到我的 ${jetty.home}/etc/jetty.xml
并且这也没有帮助(发现我重做我的堆转储)。
处理 Jetty 网络应用程序中不断增长的堆的正确方法是什么?目前,我是预生产阶段,所以我不会热部署服务器。我还将堆大小增加到 -Xmx256M
(它是一个 1GB RAM AWS 实例,所以这里没有多少活动空间)。
目前我的客户端应用程序数量很少,我主要观察使用 JVisualVM 不断增长的内存配置文件。
欢迎任何意见。任何关于弄清楚 类 到底是什么导致了这种情况的指示也很受欢迎。我目前从 summary/inspect 选项卡的 "Biggest objects" 部分的堆转储中获得了上述信息。
(编辑,02/15)
在意识到这可能是 Jetty 9.3.6 中的错误后,我添加了一些测试说明(参见 http://dev.eclipse.org/mhonarc/lists/jetty-users/msg06666.html)。我想补充一点,我当前用于此分析工作的测试环境正在使用 shell 脚本快速连续启动 Java 客户端会话(即,不描述生产环境,但这显然生产环境也是一个问题)。只有三个 shells,但他们每隔 5 秒左右就会连续不断地向 websocket 服务器发射一个全新的客户端会话(但他们会在再次执行之前关闭连接)。
我确认转移到 Jetty 9.3.7 解决了这个问题;我相信我遇到的堆 space 问题与 here 中描述的错误(和修复)有关。
具体来说,Jetty 9.3.6(可能还有 Jetty 9.3.5)存在一个错误,它没有正确清理 Jetty 服务器上的 JSR356(客户端)会话对象,导致内存不足客户端经常重新连接(或客户端太多)的应用程序泄漏。
希望这对某人有所帮助。