linux – 非cpu密集型替代lsof?

前端之家收集整理的这篇文章主要介绍了linux – 非cpu密集型替代lsof?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们运行一个 Apache Cassandra集群,每个主机在任何给定时间都有几十万个文件打开.

我们希望能够定期获取打开文件数量并将此数字输入graphite,但是当我们在collectd下运行lsof时,它最终需要几分钟才能完成,并且会占用过多的cpu.与此同时.

我想知道是否有一种替代和更友好的方法获取lsof提供的相同数据,甚至是一种运行lsof的方式,它不会明显地进入cpu? (虽然我认为后一种方法可能需要比现在更长的时间来完成…不理想).

也许内核在某个地方维护一些包含打开文件数量的变量?妄想?

更新:

响应其中一个答案,我们已经使用了-b和-n标志.这是完整的命令,因为我在collectd下运行它:

sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l

解决方法

您可能不需要解析套接字的网络地址,因此至少使用-n开关.
那么你可能也想要使用-b跳过阻塞操作.

这两个第一个开关应该真的让它更快.

然后-l以避免解决uid.和-L以避免计算链接.等等.见man lsof.

或者,使用Linux,您可以创建一个脚本来简单地计算/ proc /< PID> / fd下的链接,如下所示:

find / proc -mindepth 3 -maxdepth 3-type l | awk -F /’$4 ==“fd”{s} END {print s}’

猜你在找的Linux相关文章