Practice
Contents
💠
-
- 1.1. IDEA调优
- 1.2. FD泄漏: Unable to Open Socket File
- 1.2.1. 查找JVMSocket泄漏
💠 2024-11-18 14:31:55
问题实践
IDEA调优
|
|
参考: Java’s -XX:+AggressiveOpts: Can it slow you down?
参考: JVM参数MetaspaceSize的误解
FD泄漏: Unable to Open Socket File
- 不是同用户及用户组 uid和gid
- 目标JVM不健康
- 目标JVM使用了
-XX:+DisableAttachMechanism
JVM参数 - 执行工具的JVM和目标JVM不是同一个版本(最好保持一致,如果版本相差过大,内存布局设计不一样,就会无法正常解析结果)
- /tmp 目录下无法创建命令使用的临时文件,或是来不及使用就被
systemd-tmpfiles
清理了/tmp/.java_pidXXX
查找JVMSocket泄漏
-
strace -t -T -f -p pid -e trace=network,close -o strace.out
- 尝试找到创建socket并没有关闭socket的线程号, 然后进制转换后查看jstack找到线程持有栈关联到相关代码
-
处理过的案例: Apache DolphinScheduler V1.3.6 channel 未关闭导致socket泄漏
- 单纯从服务器现场看只能看到worker对master建立了大量socket,而且fd的特殊性无法判断socket真实建立时间
- 从worker和master的内存Dump入手,查看大量的socket(出问题时已4w+)会和哪些对象数量异常增多有关
- 排查可能异常的对象(优先看Netty和Socket有关的对象),对比上下文代码(优先关注对象创建和销毁处代码),最终定位到泄漏对象为NettyRemoteChannel,以及上述泄漏点
- 处理方式: remove前先关闭Channel
Author Kuangcp
LastMod 2024-03-06