【OS】自建MYSQL服務器OOM分析思路

      網友投稿 910 2025-03-31

      【背景描述】

      從自建MySql數據庫發生OOM的案例分析出多種因素,但大部分OOM都可以從日志和內存報錯相關方向來著手尋找原因,再根據線索來梳理優化思路。

      【環境說明】

      數據庫:MYSQL5.7

      系統版本:CentOS 7

      【分析過程】:

      一:查看日志和資源使用量(默認日志在/var/log/messages)

      1.服務器物理內存相對熱點數據文件可能偏小

      從日志(見上圖)看觸發OOM是binlog備份的cp進程。

      2.查看實例物理內存使用量對比

      (1)實例1(見下圖)配置了45G的buffer pool,發生OOM時,mysqld進程實際使用到約60G左右。

      (2)實例2(見下圖)配了32G的buffer pool,物理內存用到了57G,SWAP使用5G左右。

      結論:實際使用物理內存遠大于innodb_buffer_pool_size設置。

      3.列舉系統上的NUMA節點信息:

      Numastat –c qemu-kvm

      總結: NUMA節點(見上圖)內存分配不均導致了SWAP空間大量使用,上圖是這臺服務器mysqld進程在各NUMA節點的內存使用情況。

      建議:1.在運行mysql服務的服務器上一般只會部署mysql一種服務在運行,而不會部署若干應用運行。mysql是獨占整個服務器的資源,所以不建議開啟numa內存特性。因為這種特性很容易引起內存泄漏的情況,即發現物理內存還有剩余,但是系統已經開始使用swap內存。

      2.如果numa內存分配不均,會導致SWAP的大量占用,有可能會導致服務器發生OOM,也可以開啟numa interleave訪問。

      二:開啟和關閉NUMA

      1.開啟numa interleave步驟

      (1)安裝numactl工具:

      yum install numactl -y

      (2)修改/usr/bin/mysqld_safe文件:

      cmd="`mysqld_ld_preload_text`$NOHUP_NICENESS"下新增一條腳本

      cmd="/usr/bin/numactl --interleave all $cmd"

      (3)停止服務:

      service mysql stop

      (4)寫入硬盤,防止數據丟失:

      sync;sync;sync

      (5)延遲10秒:

      sleep 10

      (6)清理pagecache、dentries和inodes:

      Sysctl -q -w vm.drop_caches=3

      (7)開啟服務:

      service mysql start

      (8)驗證numactl?–interleave all是否生效:

      可以通過下面命令,interleave_hit是采用interleave策略從該節點分配的次數,?沒有啟動interleave策略的服務器,這個值會很低。

      numastat -mn -p `pid of mysqld`

      或者可參考:https://blog.csdn.net/weixin_36296325/article/details/114321385

      【OS】自建MYSQL服務器OOM分析思路

      2.關閉NUMA的步驟

      (1)BIOS層面:

      BIOS:interleave = Disable / Enable

      由于不同系統之間各種BIOS類型的區別可能設置各有不同。

      (2)操作系統層面:

      可以直接在/etc/grub.conf的kernel行最后添加numa=off。

      (3)MySQL層面:

      直接修改啟動腳本:

      numactl --interleave=all mysqld --defaults-file=/etc/my.cnf &

      (4)設置innodb_numa_interleave參數:

      MySQL5.7.9版本+,新增了參數innodb_numa_interleave。根據官方文檔的描述:當設置innodb_numa_interleave=1的時候,對于mysqld進程的numa內存分配策略設置為MPOL_INTERLEAVE,而一旦Innodb buffer pool分配完畢,則策略重新設置回MPOL_DEFAULT。當然這個參數是否生效,必須建立在mysql是在支持numa特性的linux系統上編譯的基礎上。

      在MySQL5.7.17版本+, CMake編譯軟件新增了WITH_NUMA參數,可以在支持numa特性的linux系統上編譯mysql。

      (5)?查看關閉情況

      MySQL 5.6.27/5.7.9開始引用innodb_numa_interleave選項??赡芨鶕煌到y和版本方法略有不同,本文旨在提供思路。

      MySQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:k8s, etcd 多節點集群部署問題排查記錄
      下一篇:Android 漸變圓環,圓形進度條效果實現
      相關文章
      亚洲av无码片在线观看| 中文字幕亚洲第一| 国产亚洲综合网曝门系列| 亚洲视频.com| 亚洲av之男人的天堂网站| 亚洲精品成人网久久久久久| 豆国产96在线|亚洲| 亚洲欧洲专线一区| 亚洲综合色婷婷在线观看| 亚洲自国产拍揄拍| 亚洲精品日韩专区silk| 亚洲理论精品午夜电影| 亚洲成人网在线观看| 亚洲va精品中文字幕| 亚洲AV无码成人专区| 在线观看日本亚洲一区| 亚洲中文字幕AV在天堂| 亚洲精品永久在线观看| 国内成人精品亚洲日本语音| 男人的天堂亚洲一区二区三区 | 中文字幕亚洲情99在线| 国产精品亚洲片在线va| 亚洲色成人网站WWW永久四虎| 亚洲欧洲国产综合AV无码久久 | 亚洲高清一区二区三区| 亚洲色一区二区三区四区| 亚洲成a人片在线不卡一二三区 | 亚洲一区二区三区久久| 中文字幕 亚洲 有码 在线 | 亚洲精品美女久久久久99| 亚洲国产精品久久久天堂| 色播亚洲视频在线观看| 亚洲精品中文字幕无乱码| 亚洲一区二区三区免费视频| 亚洲精品乱码久久久久蜜桃 | 亚洲精品国产高清嫩草影院| 国产综合精品久久亚洲| 亚洲成Av人片乱码色午夜| 亚洲人成电影亚洲人成9999网| 亚洲毛片一级带毛片基地| 亚洲综合偷自成人网第页色|