Linux 'lsof' 命令返回大值

Linux 'lsof' 命令返回大值

我使用的是带有 tomcat 9.0.24 的 Linux 服务器。当我停止 tomcat 服务器时,将返回以下输出:'lsof | wc -l' 命令

fdmt@fdm-3-136 apache-tomcat-9.0.24]$ lsof | wc -l
1203
fdmt@fdm-3-136 apache-tomcat-9.0.24]$

如果我启动 tomcat 服务器,“lsof”命令会返回大量打开的文件。请参阅下面的输出段。

[fdmt@fdm-3-136 apache-tomcat-9.0.24]$ lsof | wc -l
1203
[fdmt@fdm-3-136 apache-tomcat-9.0.24]$ ./bin/startup.sh
Using CATALINA_BASE:   /usr/local/tbx/fdmt/apache-tomcat-9.0.24
Using CATALINA_HOME:   /usr/local/tbx/fdmt/apache-tomcat-9.0.24/
Using CATALINA_TMPDIR: /usr/local/tbx/fdmt/apache-tomcat-9.0.24/temp
Using JRE_HOME:        /usr/local/java/jdk1.8.0_271/jre
Using CLASSPATH:       /usr/local/tbx/fdmt/apache-tomcat- 
9.0.24//bin/bootstrap.jar:/usr/local/tbx/fdmt/apache-tomcat-9.0.24/bin/tomcat-juli.jar
Tomcat started.
[fdmt@fdm-3-136 apache-tomcat-9.0.24]$ lsof | wc -l
30492
[fdmt@fdm-3-136 apache-tomcat-9.0.24]$

这个值一直在缓慢增加。我正在使用 Red Hat Enterprise Linux Server (VERSION=7.0) 有人会遇到同样的问题吗?请问这个问题有没有解决办法。

答案1

我已经找到了上述问题的原因@AB的回答。我在两台 Linux 服务器中启动 tomcat 实例后比较了“lsof”输出。一台服务器返回较大的值(与我原来的问题相关),而第二台服务器总是返回小于 2000 的值。

问题出现的原因是两个服务器中有两个不同版本的“lsof”。(4.82 和 4.87)最新版本包含与线程相关的结果。

lsof-4.82:(无 TID 列) 在此输入图像描述

lsof-4.87:(有 TID 列) 在此输入图像描述

因此,如果有 100 个线程,将显示打开的同一个文件 100 次(正如 @AB 提到的),这将仅算作 1 个打开的文件。但| wc -l返回不同线程的重复行数。 (这确实不正确)

相关内容