1、问题描述:
linux系统内存不够用,导致mysql服务挂了。
2、查看服务器内存
用free命令查看服务器内存:
free -h
如果想查看某个进程的内存使用情况,使用top命令:
top -p pid
3、查看服务器日志信息:
日志文件路径: /var/log/messages-20220922
Sep 21 18:48:11 host104599123 kernel: Out of memory: Kill process 20917 (mysqld) score 68 or sacrifice child
Sep 21 18:48:11 host104599123 kernel: Killed process 20917 (mysqld) total-vm:6014512kB, anon-rss:2962596kB, file-rss:0kB, shmem-rss:0kB
4、错误日志分析:
Linux 内核有个机制叫OOM killer(Out Of Memory killer),系统内存不足导致触发 Linux Kernel OOM(Out of memory killer)保护机制,将占用内存大的进程杀死,以保证系统正常运行。
备注:还发现一种情况,内存够用,但还是触发了 OOM 杀死进程。这里涉及到一个 Low Memory 的知识点。内核使用 Low Memory 来跟踪所有的内存分配。
注意:只有在 32 位操作系统中才区分 Low Memory 与 High Memory ,64 位系统中 Low Memory 就是所有内存空间。
5、解决问题的思路:
- 增加内存、使用 64 位操作系统。
- 合理配置服务的启动内存,定期重启占用内存大的服务。
- 手动释放内存:sync; echo 3 > /proc/sys/vm/drop_caches