每日一道shell练习(03)
1 . 习题写一个脚本计算linux系统所有进程占用内存大小的和
2. 习题分析
2.1.第一个问题,在哪里收集进程的数据
用top或者ps都可以获取每个进程的内存使用大小。获得大小之后,就可以通过一个循环计算它们的和了。
2.2. ps 命令的问题
通过累加 “psaux” 命令显示的 RSS 列来统计全部进程总共占用的物理内存大小,这是不对的。因为,RSS(resident set>
2.3. 应该如何获取正确的使用内存
正确的方法是累加 /proc/*/smaps 中的 Pss 。/proc//smaps 包含了进程的每一个内存映射的统计值,详见proc(5)的手册页。Pss(Proportional Set>
3. 习题答案
grepPss/proc/*/smaps | awk '{sum+=$2};END{print sum}'
69275
【分析】
[*]grep 命令可以遍历目录里的文件,然后将符合匹配字符的行抓取出来;
[*]awk 命令遍历grep 输出的结果,统计进程使用内存的和。
[*]在 /proc 目录下,有很多和进程有关的数据,读者可以自己去研究一下。
需要注意的是,全部进程占用的内存并不等于 free 命令所显示的 “used memory”,因为“used memory”不仅包含了进程所占用的内存,还包含cache/buffer以及kernel动态分配的内存等等。
页:
[1]