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上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...