java - java程序中的Unix域套接字描述符泄漏
问题描述
我有一个遭受文件描述符泄漏的java程序。
lsof -p <PID> -nP
显示大量指向同一个 inode 的项目。这是列表的示例:
java 16352 myprogram 354u unix 0xffff88042805e800 0t0 1755895875 type=STREAM
java 16352 myprogram 355u unix 0xffff88042805e800 0t0 1755895875 type=STREAM
java 16352 myprogram 356u unix 0xffff88042805e800 0t0 1755895875 type=STREAM
然后我使用netstat -ano
了,它显示 Inode 指向一个活动的 unix 域套接字。这是清单:
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 1755939110 /tmp/.java_pid16352.tmp
unix 2 [ ] STREAM CONNECTED 1755871862
unix 2 [ ] STREAM CONNECTED 1755895875
这是由提供的信息/proc/16352/net/unix
:
Num RefCount Protocol Flags Type St Inode Path
ffff8803d0181400: 00000002 00000000 00010000 0001 01 1755939110 /tmp/.java_pid16352.tmp
ffff880426541400: 00000002 00000000 00000000 0001 03 1755871862
ffff88042805e800: 00000002 00000000 00000000 0001 03 1755895875
我尝试了找出 unix 域套接字另一端的方法(https://unix.stackexchange.com/questions/16300/whos-got-the-other-end-of-this-unix-socketpair/190606# 190606),但lsof +E -aUc Xorg
什么也没提供;ss -xp | grep 1755895875
也没有提供任何内容。(我不明白“套接字由它们的 inode 编号标识。请注意,它与套接字文件的文件系统 inode 无关。”在 Stéphane Chazelas 的回答中)
请帮我找到一种方法来弄清楚:
- 我的 java 进程中的哪个线程不断生成那些 unix 域套接字描述符并导致文件描述符泄漏问题。
- 如何找出 unix 域套接字的另一个端点。
解决方案
推荐阅读
- php - 选择命令的前 12 个值
- google-cloud-platform - “无服务器”和“完全托管”有什么区别?
- laravel - 我怎样才能得到已经上传的图像?
- javascript - 反应路由器如何在浏览器路由器中包含标头链接,而标头本身不会在重定向时更新
- php - 希望获得用于视频 ID 的通用标签(逗号分隔)
- html - 仅使用 CSS 在固定语音气泡内创建打字机效果动画
- sql - 如果用户未输入值,则忽略该参数
- java - 使用 Spring MVC 的注解映射休眠中的问题
- c# - 如何在 C# 中检索 JWT 令牌?
- c# - PKCE 代码流中重定向页面的必要性(IdentityServer4)