直接执行dmesg -t | grep -i "killed process",若输出含"out of memory: kill process [pid] (mysqld) score [数值]"且时间与mysql宕机时间吻合,即可确认被oom killer终止;注意score值越高越易被杀,800+基本为内存占用主力。

怎么看 dmesg 里 MySQL 被 OOM killer 干掉的痕迹
直接执行 dmesg -T | grep -i "killed process",如果 MySQL 进程被 OOM killer 终止,一定会留下类似这样的行:[Wed May 15 02:34:22 2024] Out of memory: Kill process 12345 (mysqld) score 897 or sacrifice child
注意两个关键点:Killed process 后面紧跟着的 PID(这里是 12345)和进程名(mysqld),以及末尾的 score 值——分数越高,越容易被选中;800+ 基本就是内存占用绝对主力。
为什么 mysqld 的 OOM score 会飙这么高
Linux 内核根据进程实际内存使用量、是否长时间运行、是否分配了大量匿名页等动态计算 OOM score,而 mysqld 天然容易触发高分条件:
-
innodb_buffer_pool_size配得过大(比如占物理内存 80% 以上),且系统还有其他服务(如 Redis、Nginx、Java 应用)在争内存 - MySQL 启动后长期运行,内核认为它“更可牺牲”(老进程权重略高)
- 开启了
swap但交换区极小或禁用,导致内存压力无法缓冲,OOM killer 更激进 - 容器环境没设
memory.limit_in_bytes或--memory,cgroup 不限制,宿主机内核直接按全局内存判断
怎么确认是 OOM 而不是 MySQL 自己崩溃
别只盯 dmesg,必须交叉验证:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 查 MySQL 错误日志(
/var/log/mysql/error.log或log_error配置路径),**不会有 “InnoDB: Database page corruption” 或 “Aborted connection” 等典型崩溃痕迹,最后一行往往是干净的 shutdown 记录,甚至可能根本没写完就断了** - 用
systemctl status mysqld看状态,显示failed且Active: failed,但Process: xxx ExecStart=... (code=killed, signal=KILL)—— 注意是signal=KILL,不是signal=TERM或exit-code - 检查
/proc/$(pgrep mysqld)/status(如果进程刚死,PID 可能还残留几秒),看MMUPageSize和RssAnon是否异常高,不过这步实操意义不大,优先信dmesg+systemctl
临时缓解和长期配置要点
光改 MySQL 配置不够,得从内核和资源隔离两层下手:
- 给
mysqld进程手动调低 OOM score:启动前加echo -100 > /proc/$(pgrep mysqld)/oom_score_adj,或在 systemd service 文件里加OOMScoreAdjust=-100(值范围 -1000 到 +1000,越小越难被杀) -
innodb_buffer_pool_size别超过物理内存的 60%~70%,尤其当机器跑多个服务时;用free -h确认可用内存余量,不是看available字段,而是关注available和buff/cache的实际可回收性 - 生产环境务必禁用
swap(swapoff -a+ 注释/etc/fstab中 swap 行),避免 OOM killer 因 swap 延迟误判;但若必须保留,至少配够 2G~4G 且启用vm.swappiness=1 - 容器部署时,必须通过
--memory=4g --memory-reservation=3g显式限制,否则 cgroup v1 下mysqld的 RSS 会计入主机全局内存统计,极易触发误杀
OOM killer 不留日志到 MySQL 自身,也不走 systemd 正常退出流程,所以最可靠的线索永远只有 dmesg 里那行 Killed process。别在 error.log 里翻半天,先敲一遍 dmesg -T | grep -i "killed"。










