首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 進程被 OOM Killer 終止導致 PID 文件遺失無法重啟的解決實錄

     編輯:MySQL 資料庫相關知識

阿里雲 1 核 2G 配置承載兩個企業官網,訪問量平平,卻幾乎天天出現「資料庫連線失敗」。經排查發現:MySQL 進程因記憶體耗盡被核心 OOM Killer 強制終止,導致 PID 文件遺失、服務無法自動重啟。

現場鐵證:系統日誌

Sep 25 11:33:48 iZ28jcqqr7lZ kernel: Out of memory: Kill process 23201 (mysqld) score 53 or sacrifice child
Sep 25 11:33:48 iZ28jcqqr7lZ kernel: Killed process 23201, UID 500, (mysqld) total-vm:444168kB, anon-rss:102612kB, file-rss:120kB

根因追溯:InnoDB 緩衝池配置過大

遷移新環境後將表引擎改為 InnoDB,懷疑是 innodb_buffer_pool_size 設定過大(預設 128MB),在 2G 記憶體、無 Swap 的機器上與作業系統、其他進程搶佔記憶體,觸發 OOM。

解決步驟

  1. 重啟伺服器 釋放記憶體鎖定
  2. 啟動 MySQL 進入維護窗口
  3. 將核心業務表引擎改回 MyISAM(暫時規避 InnoDB 記憶體壓力):
    mysql> USE db_name;
    mysql> ALTER TABLE table_name ENGINE=MyISAM;
  4. 調整配置 後續需在 my.cnf 中合理設定 innodb_buffer_pool_size(建議 ≤ 物理記憶體 50-70%),並啟用 Swap 避免 OOM。

長期建議

  • 小記憶體機器慎用 InnoDB 或嚴格限制緩衝池大小
  • 配置 vm.swappiness=1 與足夠 Swap 空間
  • 監控 free -m 及 dmesg | grep -i oom 預警

以上為實戰排查全記錄,希望能幫到遇到同類問題的運維同學。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved