Netty 客户端程序运行一段时间假死

2023-03-04 10:47:37 +08:00
 panjiaming

客户端程序运行一段时间就假死

想到对方服务端最近总是登录不上,会不会是断线重连的代码有问题。新手程序员第一次遇到这种问题,没有任何报错日志,请各位大佬赐教。

这里是 GC 情况、实例数和假死前最后的日志: https://imgur.com/a/9AKTlBz

2063 次点击
所在节点    Java
14 条回复
ql562482472
2023-03-04 11:03:54 +08:00
看看代码才知道 日志没看出来啥东西
voidmnwzp
2023-03-04 11:19:49 +08:00
这个问题我之前遇到过 排查过是堆外内存溢出导致的
要设置下堆外内存的限制 -XX:MaxDirectMemorySize
ezksdo
2023-03-04 11:24:50 +08:00
看上去是连接没有正确关闭,把队列塞满了,或者像你说的重连的逻辑有问题。
ogen 100% 而 metaspace 美满,内存泄漏应该不是主要原因。
panjiaming
2023-03-04 11:27:49 +08:00
@voidmnwzp 好的我去试一下这个参数。之前设置了-Xms1024m -Xmx2048m 反而假死的更快了,本来半个月才假死,设置完几个小时就假死了,后来就给去掉了=-=
codingbody
2023-03-04 11:36:19 +08:00
假死是什么意思?
panjiaming
2023-03-04 11:43:06 +08:00
@codingbody 进程还在但是程序不运行了
panjiaming
2023-03-04 11:43:48 +08:00
@ql562482472
@ezksdo
这里是断线重连的代码: https://imgur.com/a/czDiLNZ
mango88
2023-03-04 14:38:03 +08:00
没看到关闭 EventLoopGroup 的代码
ql562482472
2023-03-04 14:43:24 +08:00
你这些代码我也没看出来问题,不过我说一下我的思路啊:
1 )进程还在但程序不运行,我理解是无法接收到新的消息,那么这里是不是有可能是:Socket 这边接受数据的缓冲区满了之后,没有被读走?这里是接受器有异常,循环 block 了?
2 )内存满了,但没有 OOM ,堆内存没有被释放,但是并没有继续申请新内存,因为如果申请了就应该 OOM 才对?
3 )还有可能就是堆外内存不足,Netty 没有堆外内存,就不会继续读请求,是不是有一个特别大的请求,一直没有传完?而且之前在 pipeline 上处理的信息没结束,之前的堆外内存也没有释放,没结束可能是哪里执行特别耗时 /卡死什么的?

你这些请求有没有规律?会不会有一些特定的功能号的连续调用引起的?
Ericcccccccc
2023-03-04 14:45:51 +08:00
先把内存加大.
panjiaming
2023-03-04 15:31:07 +08:00
@mango88 刚才把 connect 方法发给 ChatGPT 看,它也说没有关闭 EventLoopGroup 会导致内存溢出,我去改下代码再部署试试
urnoob
2023-03-04 16:14:18 +08:00
看代码片段,就是奇怪的逻辑。
channel inactive 为啥要 new client 去 connect 完全不需要这句代码。
connect 代码每次都要从头建一遍 bootstrap 那些,拿现在的重新 connect 一下不就好了么,连 listener 都不用 new
另外常量赋值有线程安全问题。为啥要 sleep thread
毫无理由的写法

写的人没理解 netty
ezksdo
2023-03-04 17:46:12 +08:00
@panjiaming 你应该复用 EventLoop ,而不是一直重新创建 eventloop
1461665214
2023-03-05 12:20:47 +08:00
看了下代码 感觉是你写的有问题 new Client 每次都创建新的线程组 每个线程组默认 CPU 核心数*2 你在应该是线程过多把 CPU 和内存资源都占了导致的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/921017

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX