如何获取进程对应打开文件描述符数量及内存使用情况
获取进程PID、文件描述符数量及内存使用情况
当然没问题!你想要的PID、进程文件描述符数量和内存使用情况,咱们可以通过lsof搭配ps工具组合实现,下面给你几个实用的方案,直接就能用:
基础整合方案
这个命令会逐个统计每个进程的文件描述符数量,再关联上对应的内存使用(常驻内存大小,单位KB):
lsof -Fn | awk '/^p/{pid=$0; sub(/^p/,"",pid)} /^f/{count[pid]++} END{for(p in count) print p, count[p]}' | while read pid fd_count; do mem=$(ps -o rss= -p $pid) echo "PID: $pid | 文件描述符数量: $fd_count | 内存使用(KB): $mem" done
命令解析
lsof -Fn:输出简洁的进程和文件描述符信息,p开头行代表PID,f开头行代表文件描述符awk:遍历输出内容,统计每个PID对应的文件描述符总数while循环:对每个PID,用ps -o rss= -p $pid获取其常驻内存大小(RSS),最后整合输出
表格化输出(更易读)
如果想要规整的表格形式,可以加上表头并用column命令对齐:
echo "PID 文件描述符数量 内存使用(KB)" lsof -Fn | awk '/^p/{pid=$0; sub(/^p/,"",pid)} /^f/{count[pid]++} END{for(p in count) print p, count[p]}' | while read pid fd_count; do mem=$(ps -o rss= -p $pid) echo "$pid $fd_count $mem" done | column -t
针对特定用户/进程查询
- 特定用户:比如只看目标用户的进程,给
lsof加上-u参数:lsof -u [用户名] -Fn | awk '/^p/{pid=$0; sub(/^p/,"",pid)} /^f/{count[pid]++} END{for(p in count) print p, count[p]}' | while read pid fd_count; do mem=$(ps -o rss= -p $pid) echo "PID: $pid | 文件描述符数量: $fd_count | 内存使用(KB): $mem" done - 特定PID:如果只想看某个特定PID(比如1234),可以直接简化命令:
fd_count=$(lsof -p 1234 | wc -l) mem=$(ps -o rss= -p 1234) echo "PID: 1234 | 文件描述符数量: $fd_count | 内存使用(KB): $mem"
自定义内存统计字段
你可以根据需求调整ps的内存输出字段:
rss:常驻内存大小(KB)%mem:内存使用率(百分比)vsize:虚拟内存大小(KB)
比如要查看内存占比,把ps -o rss= -p $pid改成ps -o %mem= -p $pid即可。
内容的提问来源于stack exchange,提问作者voltas
相关产品推荐
相关产品推荐

