MySQL占用内存和SWAP问题解决

背景

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

要解决的问题:

  • 数据库使用高内存

  • 数据库使用SWAP

解决

SWAP空间

在内存不够的时候,磁盘空间当做内存

系统默认已经分配了SWAP空间大小,可以通过指令 “cat /proc/swaps”、“swapon -s”、“free”等命令查看Swap分区的情况

系统关于SWAP的设置

vm.swappiness,这个一般需要设置成小于等于10。

设置方式:

查看是否发生内存泄露

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

数据库使用NUMA对SWAP的影响

首先,NUMA到底是什么?

它表示给CPU动态分配内存,可能会导致当某个CPU需要占用大量内存的时候,会分配不了,然后就去占用SWAP的空间了。

解决方式:5.6.27之后的版本,修改mysql里面的innodb_numa_interleave配置。

如果版本比较低,则可以在mysql_safe的启动脚本中加上numactl –interleave all 来解决。

其他调整方式

修改innodb_flush_method为O_DIRECT,这样InnoDB会绕过Cache来访问磁盘。

参考网站:
NUMA架构的CPU -- 你真的用好了么?

innodb_flush_method理解

posted @ 2024-12-25 14:01  頭がいい天才  阅读(430)  评论(0)    收藏  举报