最近几天,zabbix服务器性能监控一直报警MySQL服务器Swap占用超过50%,对于MySQL服务器来说使用swap会严重影响数据库性能。
通过free命令查看内存使用情况,信息如下:
total used free shared buffers cached
Mem: 32880188 32628976 251212 644 286996 6747344
-/+ buffers/cache: 25594636 7285552
Swap: 4095996 1963920 2132076
分析如下:
第一行:总内存32G,使用近32G,剩余250M,shared644K(弃用),buffer280M,cached6.7G
第二行:实际占用内存25.5G,实际可用内存7.2G
第三行:Swap总共4G,使用了近2G,剩余2G。
buffer和cache的区别:
buffer是写缓存,cache是读缓存。
-/+ buffers/cache意义:
第一列的值=used-buffers-cached:表示实际内存被占用情况。
第二列的值=free+buffers+cached:表示系统可释放的内存资源。
由以上的参数可以看出:系统还有7G多的内存可释放,因此可判断占用swap空间的原因是swappiness参数配置问题:
查看swappiness参数:
shell> cat /proc/sys/vm/swappiness
60
60是默认值,swappiness的取值范围是0-100,数值越小表示越倾向使用物理内存,数值越大越倾向使用swap。由于这台服务器是MySQL数据库服务器,配置了较大的物理内存32G,在这种大内存的情况下,swappiness设置为60是显然不合适的,于是做以下调整:
shell> echo 10 > /proc/sys/vm/swappiness
将swappiness的值设为10(最小可设为0),如果要永久生效,编辑/etc/sysctl.conf上添加vm.swappiness=0这个参数。