MySQL占用内存和SWAP问题解决

背景:
发现公司的项目部署上,经常出现数据库占用内存很高(接近6G)的情况,而且还出现了SWAP使用到90%左右的水平。所以需要排查数据库使用内存的情况,看数据库为什么使用了这么多内存,而且会不会频繁使用交换空间。

要解决的问题:
1、数据库使用高内存

2、数据库使用SWAP

解决思路:
一、SWAP空间
在内存不够的时候,磁盘空间当做内存。
系统默认已经分配了SWAP空间大小,可以通过指令“cat /proc/swaps”、“swapon -s”、“free”等命令查看Swap分区的情况。

二、系统关于SWAP的设置
vm.swappiness,这个一般需要设置成小于等于10。
设置方式:
MySQL占用内存和SWAP问题解决_第1张图片

三、查看是否发生内存泄露
通过free -gt 查看内存使用情况,如果cached 和 used 相差特别大的话,基本可确定系统发生内存泄露。

四、数据库使用NUMA对SWAP的影响
首先,NUMA到底是什么?
它表示给CPU动态分配内存,可能会导致当某个CPU需要占用大量内存的时候,会分配不了,然后就去占用SWAP的空间了。
解决方式:5.6.27之后的版本,修改mysql里面的innodb_numa_interleave配置。
如果版本比较低,则可以在mysql_safe的启动脚本中加上numactl –interleave all 来解决。

五、其他调整方式
1、修改innodb_flush_method为O_DIRECT,这样InnoDB会绕过Cache来访问磁盘。

参考网站:
https://www.cnblogs.com/cenalulu/p/4358802.html
http://blog.csdn.net/gua___gua/article/details/44916207

你可能感兴趣的:(MySQL,公司)