lsof 输出不一致

lsof 输出不一致

我在一台机器上运行几个java进程,我想要打开文件的数量以及这些文件的类型的准确计数。

首先,跑步sudo lsof需要很长时间。

[user@host]:~$ time sudo lsof > lsof.txt

real    1m5.920s
user    0m27.152s
sys 0m38.100s

找出java进程打开的文件数:

[user@host]:~$ grep -e "^java" lsof.txt -c
2565341

这是异常高的。

如果我尝试通过lsof使用标志过滤输出来获得相同的数字-c,我会得到一个完全不同的答案,并且lsof与第一个命令相比花费的时间很少

[user@host]:~$ time sudo lsof -c java | wc -l
4465

real    0m0.139s
user    0m0.052s
sys 0m0.068s

答案1

速度不一致的原因是套接字也是文件,以及其他与网络相关的东西,例如在 NFS 上执行 stat()。您可以运行lsof -b它将跳过这些操作。

至于行数的差异,那你就得自己检查一下结果了。有时,如果您对结果进行排序然后进行比较,会有所帮助:

    sort lsof.txt > lsof-full-sorted.txt
    diff lsof-full-sorted.txt lsof-filtered-sorted.txt

(在我的示例中 lsof-filtered-sorted.txt 指的是 的输出lsof -c java|sort

此外,午夜指挥官有一个很好的基于 diff 的文件比较功能,它比 diff 输出更容易阅读。

相关内容