websocket - Grizzly 2.4.4 关闭的 WebSockets 内存泄漏
问题描述
我被要求分析导致环境内存不足的堆转储。该项目正在使用 grizzly 2.4.4 websockets 模块。
问题是在高负载下(websocket 连接) - 当连接被频繁地创建和关闭时 - 旧的关闭连接不会被垃圾收集并导致内存泄漏。
在堆转储中,我注意到所有这些关闭的 websocket 的模式相同——它们通过它的 protocolHandler->filterChainContext->TcpNIOConnection 索引属性被实时(连接的)websocket(从 GC 根开始)以某种方式引用。
这看起来像链接:
connected_websocket ->protocolHandler->filterChainContext->tcpNioConnection->attributes->websocketHolder-> old_closed_websocket ->....
查看代码我不明白这实际上是如何实现的 - TcpNIOConnection 实例不应该是独立的而不是相互引用吗?
注意底部的 EmsWebSocket(它扩展了 DefaultWebSocket - 没什么特别的)。这是连接的 websocket。它指的是连续关闭的多个 websocket 持有者和 TcpNIOConnections。这怎么可能重现呢?我在本地尝试但没有成功。
如果某个灰熊开发人员可以对此发表评论,那就太好了。
提前致谢,
解决方案
推荐阅读
- python - 如何从 sqlite Django 中删除表格内容
- json - 如何在反应js中映射这个给定的json数据
- c# - 当隐藏层超过 1 个时,神经网络不学习
- python - 嵌套循环的时间复杂度取决于外循环
- php - Laravel 未在自定义页面中显示结果
- java - 在java中解码和编码回base64时看不到图像
- c# - 找不到 Libsodium 异常方法 C#
- interrupt - Freertos和uart发送中断的必要性
- react-native - react-native-sensitive-info 字符串在 getItem 中被表示为未定义
- android - Android Studio 布局渲染问题