统计系统中所有进程所占用的内存的方法
一、首先先来看proc中对应的两个文件,/proc/[pid]/status和/proc/[pid]/statm;
/proc/[pid]/statm的显示如下:
对应的各个参数的含义为:(单位是页,一页为4KB;与status文件中的各个参数相对应)
statm | 含义 | 对应status参数 |
---|---|---|
Size (pages) | 任务虚拟地址空间的大小 | VmSize/4 |
Resident(pages) | 应用程序正在使用的物理内存的大小 | VmRSS/4 |
Shared(pages) | 共享页数 | |
Trs(pages) | 程序所拥有的可执行虚拟内存的大小 | VmExe/4 |
Lrs(pages) | 被映像到任务的虚拟内存空间的库的大小 | VmLib/4 |
Drs(pages) | 程序数据段和用户态的栈的大小 | (VmData+ VmStk )/4 |
Dt(pages) | 脏页数量 |
与之相对应的文件为:proc/[pid]/status,包含了该进程的基本上所有的有用信息统计
二、统计系统中所有进程的物理内存使用情况
基本思路:遍历/proc下所有的进程,并提取statm下的第二列数据相加,得到所有进程使用的物理页情况,最终乘以4即内存使用情况(KB为单位),脚本代码如下:
#/bin/bash
for PROC in `ls /proc/|grep "^[0-9]"`
do
if [ -f /proc/$PROC/statm ]; then //遍历整个proc下的进程
TEP=`cat /proc/$PROC/statm | awk '{print ($2)}'` //提取每个进程的statm第二列数据
RSS=`expr $RSS + $TEP` //逐个相加
fi
done
RSS=`expr $RSS \* 4` //将单位为页转换为KB
echo $RSS"KB"