【问题标题】:Seeing too many lsof can't identify protocol看太多 lsof 无法识别协议
【发布时间】:2011-12-16 05:53:12
【问题描述】:


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

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

一个快速的谷歌搜索告诉我 strace 是一种方法,但 IIUC 将显示来自 java 进程的 linux 系统调用。我更感兴趣的是我的 java 代码的哪一部分表现不佳,而不是生成的系统调用。

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

【问题讨论】:

    标签: java linux file lsof


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      我建议您在并行运行 lsof 的同时,使用调试器(最容易使用 IDE,如果需要,还可以使用远程调试器)单步调试您的代码。您最终应该能够看到创建这些文件描述符的线程/代码行。

      有关 Lsof 输出的更多详细信息,请参阅this FAQ 的第 10.2.2 点。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-03
          • 1970-01-01
          • 2022-10-04
          • 1970-01-01
          • 1970-01-01
          • 2020-10-31
          • 1970-01-01
          相关资源
          最近更新 更多