You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取进程对应打开文件描述符数量及内存使用情况

获取进程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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:56:19