网站间歇性 502、数据库莫名停止、进程无缘无故消失,很可能是内存耗尽触发了 Linux 的 OOM Killer,系统自动杀掉了占用内存最多的进程。
可能原因
- 套餐内存不足以支撑当前业务量;
- 程序存在内存泄漏,占用持续增长;
- MySQL、Java 等服务内存参数配置过高;
- 突发流量导致进程数暴涨。
排查步骤
- 确认是否发生过 OOM 及被杀进程:
dmesg -T | grep -i -E "out of memory|killed process"
journalctl -k | grep -i oom
- 查看当前内存占用与大户:
free -m
ps aux --sort=-%mem | head -n 10
- MySQL 占用过高:降低 innodb_buffer_pool_size 等参数;Java 应用调整 -Xmx 上限。
- 内存泄漏类问题:安排定时重启作为临时方案,并从代码层面修复。
- 没有 swap 的系统可临时添加 swap 缓解(会牺牲部分磁盘性能):
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
- 长期内存持续不足,建议升级更高内存的套餐。
注意:swap 只是缓冲手段,内存硬缺口仍需通过优化程序或升级配置解决。
仍未解决
请通过「支持服务 → 工单」反馈,附上 dmesg 中的 OOM 记录、free -m 与 ps 输出、被频繁杀掉的进程名,客服将协助给出配置建议。