linux – 由lsof找到但不是由netstat发现的套接字

我有一个用尽文件描述符的应用程序,显然是通过打开套接字,但我无法确切地知道这些套接字的作用.这些出现在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

并在/ 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]

但netstat -a中没有类似的输出.

这些插座是什么,我怎样才能知道它们的作用?

编辑:我已经尝试按照lsof FAQ中的建议运行grep $SOCKET / proc / net,其中$SOCKET例如是263746679,但是也没有给出任何结果.

作为背景,应用程序是多个任务的容器,其中包括执行网络调用.我需要挑出一个狂暴的那个,但直到我发现那些插座与谁通信,我才被卡住了.

解决方法

如果您创建套接字,但从不connect()或bind(),则可能会发生这种情况.你最好的选择可能是strace(-fF)应用程序,然后用lsof的输出交叉引用来确定导致问题的套接字.作为一种额外的调试方法:如果你用调试信息包装你的套接调用并将它们写到/ dev / null,它将出现在strace中,而不会给你带来欢闹的大型日志文件.

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...