unix 在Mac OS X中,如何获得文件描述符使用的准确计数?

iyfjxgzm  于 2022-11-23  发布在  Unix
关注(0)|答案(4)|浏览(217)

在Linux上,ulimit -n可用于更改或查看进程的文件描述符数量限制,并且lsof -p nnn | wc -l似乎始终报告实际的文件描述符使用情况。
但是在Mac OS X上,lsof -p nnn | wc -l可以返回一个比限制更高的数字,我想这意味着lsof返回的不仅仅是文件描述符,但是我不能分辨什么是什么。
底线:如何获得Mac OS X中文件描述符使用的准确计数?

bmvo0sr5

bmvo0sr51#

我最近遇到了识别这一点的需要--我用来计算总条目数的命令(所以不仅仅是文件句柄,但它是相对的,所以在我看来是相关的)是:

lsof | awk '{print $1}' | sort | uniq -c | sort -rn | head

这将给出类似于以下的输出(使用率最高的应用程序可能会有所不同!):

$lsof | awk '{print $1}' | sort | uniq -c | sort -rn | head
1259 Google
 682 Code\x20H
 369 Spotify
 334 VLC
 322 cloudd
 303 corespotl
 278 com.apple
 273 UserEvent
 249 GitHub
 176 Slack\x20

我通常只需要查看前10个条目,但是您可以操纵head来显示任意多行(例如,head -n 40)。

wwtsj6pe

wwtsj6pe2#

lsof可以显示文件描述符以外的许多内容,但最有可能增加计数的是应用程序加载的框架和库。您可以查看“FD”列,查看某行是否是文件描述符--在这种情况下,它是一个数字,后面可能跟一个表示模式的字母--或其他内容(有关完整列表,请参见lsof手册页中FD列的描述)。
如果你只需要一个粗略的近似值,那么在wc之前添加一个'grep -v“txt“'可以让你更接近于一个精确的值。如果你需要一个精确的值,那么你可能需要组合一个正则表达式来通过文件过滤器精确地提供FD列的输出。

pxy2qtax

pxy2qtax3#

我修改了anders的答案,现在它只显示一个特定进程的打开的fd编号:

FCOUNT=`lsof -p $1 | grep -v " txt " | wc -l`;echo "PID: $1 $FCOUNT" | sort -nk3

示例:

$ ./fd-count.sh 5926                                                                                                           
PID: 5926       97
6qfn3psc

6qfn3psc4#

我在寻找哪个进程有很多文件描述符-所以我猜是这样的

for pid in `ps aux | tail -n +2 | awk '{print $2}'`; do FCOUNT=`lsof -p $pid | grep -v " txt " | wc -l`; echo "PID: $pid $FCOUNT"; done | sort -nk3

相关问题