多次數據庫主機由於vm.min_free_kbytes參數導致kswapd0占用CPU高問題分析


【環境介紹】
  系統環境:CentOS Linux 7 (Core) + 5.7.26 MySQL Community Server - GPL

【情況描述】

業務側反應使用應用跟查詢數據庫很慢,需要查看是什么原因

 

【情況分析】

第一次簡單分析

使用top查看數據庫資源情況:查看數據庫kswapd0占用很高的CPU,根據進程名字懷疑主機由於swap導致,調整/proc/sys/vm/swappiness后,重啟數據庫恢復正常;

 

第二次分析

沒過幾天又反饋同樣的問題,使用緩慢,仍然查看到kswapd0占用CPU高;

查看swap情況:使用vmstat -s | grep -i page命令觀察到並沒有使用到swap

 

同時查看到磁盤的io:觀察到性能達到瓶頸,且該磁盤是操作系統盤

 

 

 同時觀察到主機的錯誤日志:查看到MySQL數據庫的內存OOM

 

查看數據庫內存使用情況:初步懷疑是申請內存空間導致緩慢,於是調整數據庫內存,同時觀察到數據庫層面開啟了query cache,調整內存同時關閉query cache,同時建議主機測增加內存,重啟數據庫后恢復正常

 

 由於數據庫沒有開啟performance參數,無法使用SELECT * FROM sys.memory_global_total查看內存,使用參數方式大概查看內存占用,數據庫占用5.1G內存

 

 

查看數據庫日志:

page_cleaner: 1000ms  intended loop took **ms. The settings might not be optimal.((flushed="**" , during the time.)

這個警告一般是IO能力不足,或者參數不夠優化的結果,從top,iostat查看的磁盤壓力一致

 

第三次分析

過了大概幾天,應用側又反饋數據庫使用緩慢:

查看數據庫資源,仍然是看到kswapd0占用高的CPU,同時主機磁盤的IO性能跟第二次的一致,查看主機錯誤日志,這次沒有發現MySQL數據庫OOM的情況;

查看數據庫的占用內存情況,占用了主機的80%,按照這個比例數據庫使用不應該這么緩慢,於是查看涉及數據庫的配置文件

查看到/etc/sysctl.conf文件中的vm.min_free_kbytes=1048576參數配置是沒有在方案中的,於是查看這個參數說明,調整為默認值,使用sysctl -p 生效

 

 這時候主機馬上運行正常,最終定位為vm.min_free_kbytes=1048576參數導致主機kswapd0占用CPU高

 

 

 

 

查看該參數記錄

查看操作系統日志沒有發現記錄

查看history查看到記錄信息,咨詢主機側是他們進行了修改

 

 

 

查看官方文檔參數解釋:

Sysctl vm.min_free_kbytes為內核內存分配保留的內存量。 默認情況下,此值為〜67MB

 

 查看Oracle數據庫官方建議:

 

 

【總結】

1,建議初始化時候關閉query cache;

2,根據實際情況調整主機參數;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM