诊断
- 确认是否是 OOM Kill
dmesg | grep -i "killed process" grep -i "oom" /var/log/messages
- 查看内存消耗来源
-- InnoDB Buffer Pool SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; -- 每连接内存 SHOW VARIABLES LIKE 'sort_buffer_size'; SHOW VARIABLES LIKE 'join_buffer_size'; SHOW VARIABLES LIKE 'read_buffer_size'; -- 当前连接数 SHOW STATUS LIKE 'Threads_connected';
- 临时降低缓冲池大小(在线)
-- MySQL 5.7+ 支持在线调整(会有短暂抖动) SET GLOBAL innodb_buffer_pool_size = 2*1024*1024*1024; -- 2GB
内存配置参考(8GB 物理内存)
[mysqld] innodb_buffer_pool_size = 5G # 物理内存 60~70% innodb_log_buffer_size = 64M sort_buffer_size = 1M # 每连接,不要过大 join_buffer_size = 1M read_buffer_size = 512K max_connections = 200 # 200 * (1+1+0.5+0.5)M ≈ 600MB