一:内存大小查看
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、当空闲内存变少时,系统开始频繁的调动磁盘页面文件,空闲内存过小可能是内存不足或内存泄漏引起的,需要根据系统实际情况监控分析