Rob*_*anu 20 networking linux tcp udp socket
我有一个应用程序的文件描述符用完了,显然是通过打开套接字,但我无法确切地找出这些套接字的作用。这些出现在 lsof 输出中
java 9689 appuser 1010u sock 0,5 263746675 can't identify protocol
java 9689 appuser 1011u sock 0,5 263746676 can't identify protocol
java 9689 appuser 1012u sock 0,5 263746677 can't identify protocol
java 9689 appuser 1014u sock 0,5 263746678 can't identify protocol
java 9689 appuser 1015u sock 0,5 263746679 can't identify protocol
java 9689 appuser 1016u sock 0,5 263746681 can't identify protocol
Run Code Online (Sandbox Code Playgroud)
并在 /proc/$PID/fd 中
lrwx------ 1 appuser appuser 64 Jun 23 11:49 990 -> socket:[263732085]
lrwx------ 1 appuser appuser 64 Jun 23 11:49 991 -> socket:[263732086]
lrwx------ 1 appuser appuser 64 Jun 23 11:49 992 -> socket:[263735307]
lrwx------ 1 appuser appuser 64 Jun 23 11:49 993 -> socket:[263732088]
lrwx------ 1 appuser appuser 64 Jun 23 11:49 995 -> socket:[263735308]
lrwx------ 1 appuser appuser 64 Jun 23 11:49 996 -> socket:[263735309]
lrwx------ 1 appuser appuser 64 Jun 23 11:49 997 -> socket:[263745434]
lrwx------ 1 appuser appuser 64 Jun 23 11:49 998 -> socket:[263745435]
lrwx------ 1 appuser appuser 64 Jun 23 11:49 999 -> socket:[263745436]
Run Code Online (Sandbox Code Playgroud)
但在netstat -a.
这些插座是什么,我怎样才能知道它们的作用?
编辑:我试过运行grep $SOCKET /proc/net,如lsof FAQ 中所推荐的那样 ,其中 $SOCKET 是例如 263746679,但也没有给出任何结果。
作为后台,该应用程序是多个任务的容器,其中包括执行网络调用。我需要挑出一个狂暴的,但直到我找出那些套接字与谁通信,我被卡住了。
BMD*_*Dan 17
如果您创建了一个套接字,但从不使用它 connect() 或 bind(),就会发生这种情况。最好的办法可能是跟踪 (-fF) 应用程序,然后与 lsof 的输出进行交叉引用,以确定导致问题的套接字。作为一个额外的调试方法:如果你用调试信息包装你的套接字调用并将它们写出到 /dev/null,它会出现在 strace 中,而不会给你非常大的日志文件。
| 归档时间: |
|
| 查看次数: |
27386 次 |
| 最近记录: |