看到太多的lsof无法识别协议

Joh*_*nny 23 java linux file lsof


我有一个Java进程/应用程序.当我在那个java进程上运行/ usr/sbin/lsof -p时,我看到很多"无法识别协议".另外,有趣的是,文件描述符(FD)以非常稳定的速率增加.正在创建的FD正在描述为"无法识别协议".

那么,有没有办法对java进程进行检测/分析,以便确定谁在创建那么多FD.任何工具的任何详细解释都会非常有用.

一个快速的谷歌搜索告诉我strace是一种方式,但IIUC,将显示来自java进程的Linux系统调用.我更感兴趣的是我的java代码的哪一部分比正在生成的系统调用表现得差.

同样,任何想法/建议都会很棒!

Mar*_*rek 14

can't identify protocol打开半开TCP/IP连接的Lsof :https://idea.popcount.org/2012-12-09-lsof-cant-identify-protocol/


lah*_*her 8

当lsof打印"无法识别协议"时,这通常与套接字有关(它也应该在相关的输出行中说'sock').

因此,在您的代码中的某个位置,您可能正在连接套接字而不是正确关闭它们(可能您需要一个finally块).

我建议您使用调试器(最容易使用IDE,可能使用远程调试器,如果有必要)逐步执行代码,同时并行运行lsof.您最终应该能够看到哪个线程/代码行正在创建这些文件描述符.

有关Lsof输出的更多详细信息,请参见本FAQ的 10.2.2节.