Shell脚本编程——监控系统内存之free

    应用编程中,比较常见的错误是内存方面的问题,比如内存泄漏。内存问题带来的影响较广泛,大至内存耗尽(OutOfMemory)或系统崩溃,小至拖慢进程的运行速度。而且,很多系统为了加快进程的启动速度,采用了预加载技术,当诸多预加载的守护进程长时间不用的时候,这也会占用系统的一部分资源,包括内存。为了发现问题或调试程序,就很有必要监控系统的内存使用状况。系统内存的监控方法有free、ps、pmap、procfs等。

    先看下众所周知的free工具。

    free命令显示物理内存和交换空间的内存统计数据。指定-t参数可以显示总内存数量,指定-b参数可以按字节为单位进行显示,使用-m则以兆为单位显示,默认情况下是以kB(千字节)为单位的。free命令也可以使用-s参数加一个延迟时间(单位:秒)连续运行,如下所示:
[workbox: /home/luojianh ]$ free -s 1
[workbox: /home/luojianh ]$ free -s 1
             total       used       free     shared    buffers     cached
Mem:      33264720    7356628   25908092     0     306756    3866276
-/+ buffers/cache:       3183596  30081124
Swap:     32764556               0   32764556

    free加-t参数统计total值。
[workbox: /home/luojianh ]$ free -t
             total       used       free     shared    buffers     cached
Mem:      33264720   23963860    9300860          0     321508    4725668
-/+ buffers/cache:   18916684   14348036
Swap:     32764556          0   32764556
Total:    66029276   23963860   42065416

    第一行Mem和第二行的差别在于buffers/cached,这两个是实际上未必在使用的内存。他们的关系是:
used1-used2=free2-free1=buffers+cached
总共的物理内存为:total1=used1+free1=used2+free2。(1表示第一行,2表示第二行)

    重点说明其中的buffers和cached字段。buffers是block device cache,cached是memory paging cache。前者是用于访问不同速度设备的缓冲,后者是用于访问文件的缓存(比访问flash等disk设备快得多!)。

    用free命令监控系统的总体内存使用状况,shell脚本如下:

LOG_FILE=/tmp/memory_status.log
echo "Total  Used  UsingRate" >> ${LOG_FILE}
free -s 3 >> ${LOG_FILE}.tmp
while true; do
    TOTAL=$(free -t | grep Mem | awk '{print $2}')
    USED=$(free -t | grep cache: | awk '{print $3}')
    RATE_USED=`expr $USED / $TOTAL`
    echo "$TOTAL $USED $RATE_USED" >> ${LOG_FILE}
    sleep 3
done

    附带提一下,vmstat、top等系统命令也包含部分内存信息。如下所示。
root@base0:/root ]$ vmstat 1
procs    -----------memory----------     ---swap--   -----io----  --system--   -----cpu------ 
 r  b   swpd   free   buff  cache   si   so     bi   bo   in    cs    us sy id wa st
 8  1   0 2563344 467536 7745908    0    0     5   35    2    6    3  20 77  0 0
 7  0   0 2564116 467576 7747912    0    0  2036  632  6620 437995  30  51 17  2 0
 2  1   0 2589984 467632 7749200    0    0   408    0  3680 469111  24  58 17  2 0
 8  0   0 2557996 467648 7750060    0    0   160    0  2187 480338  28  54 14  3 0

root@base0:/root ]$ top
top - 11:51:54 up 4 days, 11:11,  1 user,  load average: 0.27, 0.37, 0.39
Tasks: 200 total,   1 running, 198 sleeping,   0 stopped,   1 zombie
Cpu(s):  0.1%us,  0.6%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2543164k total,  1296080k used,  1247084k free,     7388k buffers
Swap:        0k total,        0k used,        0k free,   916580k cached

……
……

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值