MySQL資料庫占用內存和SWAP問題的解決方法

背景:

發現公司的項目部署上,經常出現資料庫占用內存很高(接近6G)的情況,而且還出現瞭SWAP使用到90%左右的水平。所以需要排查資料庫使用內存的情況,看資料庫為什麼使用瞭這麼多內存,而且會不會頻繁使用交換空間。

要解決的問題:

1、資料庫使用高內存

2、資料庫使用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 來解決。

五、其他調整方式

1、修改innodb_flush_method為O_DIRECT,這樣InnoDB會繞過Cache來訪問磁盤。

You May Also Like