【发布时间】:2017-12-27 18:47:09
【问题描述】:
我在 AWS 机器上运行 Tomcat 8.5.9,部署了 10 个不同的 WebSocket 应用程序,每个应用程序基本上都充当消息代理。 https 连接器使用的是 Http11NioProtocol。我设置的唯一参数是 maxThreads=200 以及证书信息。
请求量不是很高。它从周一早上开始运行,经理状态如下:
最大线程数:200
当前线程数:38
当前线程忙:0
保持活动套接字数:1
最大处理时间:234 毫秒
处理时间:17.254 秒
请求数:33351
错误计数:325
收到的字节数:0.00 MB
发送的字节数:34.07 MB
几天后,我注意到内存使用量继续增长。我必须大约每两周左右重新启动一次 Tomcat 服务,以防止出现 OutOfMemoryException。
我一直在使用 Eclipse MAT 进行堆转储和分析,它总是指出 WsFrameServer 类是问题的嫌疑人。最近的转储显示以下内容:
5,146 个“org.apache.tomcat.websocket.server.WsFrameServer”实例,
由“java.net.URLClassLoader @ 0x6c0047c28”加载占用1,383,143,200
(73.13%) 个字节。这些实例引用自
的一个实例 "java.util.concurrent.ConcurrentHashMap$Node[]"
Dominator Tree 目前有 106,000 个条目,其中大部分是 WsFrameServer 类。
我做错了什么还是“正常”?在 Tomcat 或连接器上是否有任何特定设置我应该设置以防止这种情况发生?
提前致谢。
编辑:我不确定这是否有帮助,但这是 VisualVM 监视器的样子:
【问题讨论】:
标签: java tomcat memory websocket eclipse-mat