要避免重复计算多个进程同时占用的内存,像是页缓存、共享内存这类。如果把 ps、top 得到的数据直接相加,就会出现重复计算的问题。这里,推荐从 /proc//smaps 统计出所有进程的物理内存使用量。需要通过man proc了解/proc/smaps 文件中各个指标含义。这里是把proc//smaps中的Pss相加,因为Pss是私有内存+共享内存按比例属于自己计算的那一部分,通过Pss不需考虑重复计算问题。这里给出简单的shell脚本getrealmem.sh

#!/bin/bash

#get tsum
tsum=0
pidsum=0
for pid in `ls /proc | grep -e '[0-9]'`;
do 
  #echo pid
  pidsum=`awk '/Pss:/{ sum+=2 } END { print sum }' /proc/pid/smaps`;
  if echopidsum | grep -e '[0-9]' > /dev/null
  then
    tsum=[tsum+pidsum ]  fi
done 
#对内存大小使用红色31m、高亮1m、闪烁5m 
echo -e "实际使用物理内存: \033[31;1;5m[ $tsum/1024 ]  \033[0m" "MB"

发表评论

电子邮件地址不会被公开。