Linux 上 MySQL 占用过高(CPU、内存或磁盘 IO)通常是配置不合理 + 负载异常共同导致的。下面按常见原因 → 排查方法 → 解决思路来说明。
innodb_buffer_pool_size 设置过大这是 MySQL 最大的内存消耗项。
排查
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
建议
每个连接都会占用内存(默认可能 1~几 MB)。
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';
可能问题
解决
SET GLOBAL wait_timeout = 60;
SET GLOBAL interactive_timeout = 60;
这是 CPU 高的最常见原因。
SHOW PROCESSLIST;
或开启慢查询日志:
SHOW VARIABLES LIKE 'slow_query_log';
典型问题
解决
SELECT *SHOW STATUS LIKE 'Created_tmp_disk_tables';
如果磁盘临时表很多,CPU + IO 都会高。
SHOW STATUS LIKE 'Innodb_rows_inserted';
free -h
iostat -x 1
free -h
swapon --show
MySQL 一旦用 swap,性能会断崖式下降。
解决
sysctl vm.swappiness=1
ulimit -a
# 系统资源
top
htop
free -h
iostat -x 1
# MySQL
mysqladmin processlist
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;
# 慢查询
SHOW VARIABLES LIKE 'slow_query_log';
| 现象 | 最可能原因 |
|---|---|
| 内存一直涨 | buffer pool 大 / 连接多 |
| CPU 100% | 慢 SQL |
| IO 高 | 写多 / 索引差 |
| 卡顿但资源不高 | swap |
如果你愿意,可以告诉我:
我可以直接帮你看配置并给优化参数。