Linux下如何通过命令获取指定进程的共享内存(SHR)占用字节数
在Bash脚本中获取指定进程SHR共享内存字节数的方法
你可以直接用ps命令的内置字段获取SHR值,和你查询VSZ的用法逻辑完全一致,也可以通过读取proc文件系统拿到更稳定的结果:
最简ps命令方案
ps工具原生支持shr输出字段,和你用ps -o vsz= -p <PID>查虚拟内存的写法完全对齐,默认输出单位为KB:# 输出指定PID的SHR值(单位KB),无多余表头 ps -o shr= -p <目标PID>如果需要脚本中直接拿到字节单位的纯数值,做一次简单算术转换即可,建议先去除输出前后的多余空格避免计算异常:
# 直接得到字节单位的SHR数值,存入变量 shr_bytes=$(( $(ps -o shr= -p <目标PID> | tr -d ' ') * 1024 ))这个字段的统计口径和top命令中展示的SHR指标完全一致,包含进程映射的共享库、共享内存段等所有可跨进程共享的内存部分
更稳定的procfs方案
如果想要规避不同发行版ps输出格式差异的问题,可以直接读取内核暴露的进程统计文件,结果精度更高:pid=<目标PID> # 获取系统内存页大小(单位字节) page_size=$(getconf PAGESIZE) # /proc/[pid]/statm 第三个字段为进程占用的共享内存页数 shr_pages=$(awk '{print $3}' /proc/$pid/statm) # 计算得到字节单位的SHR值 shr_bytes=$(( shr_pages * page_size ))这个方案不需要调用ps工具,执行效率更高,在绝大多数Linux发行版上都能稳定运行。
注意:如果传入的PID不存在,上述命令会返回空值或报错,生产环境脚本中建议提前增加PID存在性校验逻辑,避免异常。
内容的提问来源于stack exchange,提问作者Oleksandr
相关产品推荐
相关产品推荐

