服务隔三差五自动重启,日志里又没有报错,罪魁祸首常常是内存耗尽:Linux 的 OOM 机制会在内存见底时"牺牲"最占内存的进程来保住系统,你的数据库往往就是那个牺牲品。
先学会正确看内存
执行 free -h,重点看 available 这一列,它才是真正可用的内存。buff/cache 那部分看着占用大,其实是随时可以让出来的缓存,不用慌。
确认是不是 OOM 干的
查内核日志:dmesg | grep -i oom,出现 Out of memory: Killed process 字样就是实锤,被杀的进程名也会写明。
治本三板斧
- 找吃内存的进程:
top按 M 键排序,通常是数据库或 Java 应用 - 调配置:数据库缓存、JVM 堆上限按实际内存收紧,别让默认配置吃光整台机器
- 小内存机加 swap 做缓冲,长期吃紧就升配
一句话总结:available 长期低于两成就是危险信号,别等到 OOM 开始杀进程才动手。