509GB RAM 的服务器,只有 9GB 可用,Swap 为 0,共享内存 163GB。更糟的是,OOM Killer 曾经杀掉了 MySQL 进程(占用 ~142GB RAM)。
问题分析
通过 free -h 和 smem -t -k 排查,发现几个主要问题:
- MySQL 的
innodb_buffer_pool_size配置过大 - 大量共享内存被 PostgreSQL 的
shared_buffers占用 - 没有配置 Swap 作为安全网
优化措施
- 将 MySQL buffer pool 从 128GB 降到 64GB
- PostgreSQL shared_buffers 从 16GB 降到 8GB
- 创建 32GB Swap 文件作为安全网
- 配置
vm.swappiness=10减少不必要的换出
结果
优化后可用内存稳定在 200GB+,Swap 几乎不使用,OOM Killer 不再触发。