内存监控命令


一:内存大小查看
    1、free -m (m为单位,MB)【静态查看】
    内存监控命令
    total        #总内存
    used        #已经使用了的
    free        #空闲的
    shared        #共享
    buffers        #缓冲区
    cached        #缓存区
    -/+buffers/cache        #当内存不足时,会将buffer和cache拿过来用,也就是说,可以当做为free
    
    2、vmstat 【动态查看】
    内存监控命令
    swpd        #有多少物理内存被切换到swap空间,单位为kb
    free        #空间物理内存的数量,单位为kb
    buffers        #文件缓冲
    cache        #文件缓存
    so            #写到swap空间中的数据量,单位kb
    si            #从swap中写回内存的数据量,单位kb
    bo            #从内存中换出到swap中的数据块
    bi            #从swap中换入到内存中的数据块
    
    3、datat
        1、datat是一个用来替换vmstat,iostat,netstat,nfsstat和ifstat这些命令的工具
        2、与sysstat相比,dastat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察
        3、dastat支持即时刷新,譬如输入dstat 3,即每三秒收集一次,但最新的数据会每秒刷新显示
        4、dastat也可以收集指定的性能只有,譬如dastat -c即显示CPU的使用情况
        
二:内存监控工具----valgrind(主要用来监控c或者c++)
    1、valgrind是一个提供程序调试及性能分析的工具集其中,最为常见的是memcheck,用来检查程序的内存使用情况
    2、下载地址:
        http://valgrind.org/downloads/valgrind-3.3.0.tar.bz2
        或者:
        yum install valgrind
        
    3、写一个内存泄漏的脚本
        1、下图为例,保存为memory_leak.c

内存监控命令
       //free(fuffer); //free the memory      关闭内存释放

         2、由于是C语言脚本,需要编译
            gcc -o ml memory_leak.c
        3、运行
            ./ml
            
    4、valgrind --tool=memcheck --leak-check=full ./ml
        ml为可执行文件,使用上述命令可以监控到ml可执行程序是否存在内存泄漏
        
        
三:虚拟内存内存参数调整
    1、运行命令,查看内核中的虚拟内存参数
        sysctl -a | grep vm
    
    2、对系统性能影响比较大的几个参数
        sysctl -w vm.swappiness=60            
        sysctl -w vm.dirty_background_ratio=10
        sysctl -w vm,dirty_ratio=20
        
    3、swap分区的使用比率
        
        sysctl -w vm.swappiness=10
        
        1、如发现系统对于swap的使用极少,可以将值设置为0。这并不会禁止对swap的使用,而是使系统对于swap的写入尽可能的少,同时尽可能多的使用实际内存。这对于在切换应用程序时有着巨大的作用,因为这样的话,他们是在物理内存而非swap分区中
        2、如果想永久改变这一值,将更改保存在/etc/sysctl.conf文件中
        
    4、用于回写内存中的脏数据到硬盘(此命令专门针对整个内存空间)
    
        脏数据:CPU调用内存的数据后,发生了改变的数据,称为脏数据
    
        sysctl -w vm.dirty_background_ratio=10
        
        1、说明如果内存中的脏数据达到总内存的百分之10时,那么pdflush线程就会启动,将内存中的脏数据写回硬盘,这个值可适当调高,可获得更快的写入速度,因为调高了,可以减少脏数据写回磁盘的频率,如果wa比较高切内存还有空余,可以尝试调高这个值,充分利用内存,降低CPU等待磁盘的时间。
        2、如果想永久改变这一值,将更改保存在/etc/sysctl.conf文件中
        
    5、当内存里面的缓存应用到20%,通过I/O写到文件里(此命令专门针对应用的缓存,针对buffers写到磁盘的频率)
        
        sysctl -w vm,dirty_ratio=20
        
        1、如果想永久改变这一值,将更改保存在/etc/sysctl.conf文件中

四、内存瓶颈分析
    1、一般至少有10%可用内存,内存使用率可接受上限为85%(行业规范,通用的)
    2、当空闲内存变少时,系统开始频繁的调动磁盘页面文件,空闲内存过小可能是内存不足或内存泄漏引起的,需要根据系统实际情况监控分析