我的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 webapp中处理不断增长的堆的正确方法是什么?目前,我正在进行预生产,因此我没有热部署服务器。我还将堆大小增加到-Xmx256M
(这是一个1GB的RAM AWS实例,因此这里没有多少肘部空间。)
我的客户端应用程序目前数量很少,我主要使用JVisualVM观察不断增长的内存配置文件。
任何输入都表示赞赏。任何关于确定究竟是什么类导致这种情况的指针也是值得赞赏的。我目前从摘要/检查选项卡的“最大对象”部分的堆转储中获取上述信息。
(编辑,02/15)
我在意识到这可能是Jetty 9.3.6中的一个错误之后添加了一些测试说明(参见http://dev.eclipse.org/mhonarc/lists/jetty-users/msg06666.html)。我想补充一点,我目前用于此分析工作的测试环境是使用shell脚本快速连续启动Java客户端会话(即,不描述生产环境,但这显然也是生产环境的问题) 。只有三个shell,但它们每隔5秒左右就会连续向webocket服务器发送一个全新的客户端会话(但是在他们重新连接之前它们会关闭连接)。
答案 0 :(得分:3)
我确认转移到Jetty 9.3.7删除了这个问题;我相信我遇到的堆空间问题与here中描述的bug(和修复)有关。
具体来说,Jetty 9.3.6(也可能是Jetty 9.3.5)中有一个错误,它没有在Jetty服务器上正确清理JSR356(客户端)会话对象,导致内存泄漏客户经常重新连接的应用程序(或者有太多的应用程序)。
希望这有助于某人。