看到太多 lsof 无法识别协议




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

那么,有没有什么方法可以对java进程进行检测/评测,从而确定谁在创建这么多FD。任何关于任何工具的详细解释都会非常有帮助。

快速的谷歌搜索告诉我strace是一种方式,但IIUC,它将显示来自java进程的linux系统调用。比起生成什么系统调用,我更感兴趣的是我的java代码的哪一部分表现得不好。

再说一次,任何想法/建议都是非常棒的!

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

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

因此,在代码的某个地方,您可能正在连接套接字,但没有正确关闭它们(也许您需要一个finally块(。

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

有关Lsof输出的更多详细信息,请参阅本常见问题解答的10.2.2点。

当您使用SSL和主机名时,您可能会在JVM 1.6中发现连接泄漏的错误:http://bugs.sun.com/view_bug.do?bug_id=6745052

最新更新