Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 看到太多的lsof can';t识别协议_Java_Linux_File_Lsof - Fatal编程技术网

Java 看到太多的lsof can';t识别协议

Java 看到太多的lsof can';t识别协议,java,linux,file,lsof,Java,Linux,File,Lsof,我有一个Java进程/应用程序。当我在那个java进程上运行/usr/sbin/lsof-p时,我看到很多“无法识别协议”。此外,有趣的是,文件描述符(FD)正以非常稳定的速度增长。正在创建的FD被描述为“无法识别协议” 那么,有没有办法对java过程进行工具化/概要分析,以便确定是谁创建了这么多的FD。任何关于任何工具的详细解释都会非常有用 快速的谷歌搜索告诉我strace是一种方式,但IIUC会显示java进程中的linux系统调用。我更感兴趣的是我的java代码中哪一部分的行为比生成的系统


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

那么,有没有办法对java过程进行工具化/概要分析,以便确定是谁创建了这么多的FD。任何关于任何工具的详细解释都会非常有用

快速的谷歌搜索告诉我strace是一种方式,但IIUC会显示java进程中的linux系统调用。我更感兴趣的是我的java代码中哪一部分的行为比生成的系统调用更糟糕

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

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

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

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


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

当您使用SSL和主机名时,可能会发现JVM 1.6中存在连接泄漏的错误:

Lsof打印
无法识别半开放TCP/IP连接的协议: