温馨提示×

linux mysql为何占用过高

小樊
52
2026-10-18 10:16:07
栏目: 云计算

Linux 上 MySQL 占用过高(CPU、内存或磁盘 IO)通常是配置不合理 + 负载异常共同导致的。下面按常见原因 → 排查方法 → 解决思路来说明。


一、内存占用过高(最常见)

1. innodb_buffer_pool_size 设置过大

这是 MySQL 最大的内存消耗项。

  • 如果你设置成 70%~80% 物理内存,在内存小的机器上会“看起来占用很高”
  • 在 Docker / 云服务器上尤其明显

排查

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

建议

  • 物理内存 ≤ 2G:设为 512M~1G
  • 4G:1.5G~2G
  • 8G:4G~5G

2. 连接数过多(max_connections)

每个连接都会占用内存(默认可能 1~几 MB)。

SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';

可能问题

  • 应用未释放连接
  • 连接池配置错误
  • 出现大量 Sleep 连接

解决

SET GLOBAL wait_timeout = 60;
SET GLOBAL interactive_timeout = 60;

二、CPU 占用过高

1. 慢查询 / 全表扫描

这是 CPU 高的最常见原因。

SHOW PROCESSLIST;

或开启慢查询日志:

SHOW VARIABLES LIKE 'slow_query_log';

典型问题

  • 没加索引
  • LIKE ‘%xx%’
  • 大表 JOIN
  • ORDER BY 无索引

解决

  • 加索引
  • 优化 SQL
  • 避免 SELECT *

2. 临时表 / 排序频繁

SHOW STATUS LIKE 'Created_tmp_disk_tables';

如果磁盘临时表很多,CPU + IO 都会高。


三、磁盘 IO 占用高

1. 大量写入(binlog / redo log)

  • 高并发写入
  • 未批量提交事务
SHOW STATUS LIKE 'Innodb_rows_inserted';

2. 磁盘性能差

  • 云服务器用普通云盘
  • swap 被使用
free -h
iostat -x 1

四、系统层面原因

1. 使用了 Swap

free -h
swapon --show

MySQL 一旦用 swap,性能会断崖式下降。

解决

sysctl vm.swappiness=1

2. 文件句柄 / 线程数限制

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

如果你愿意,可以告诉我:

  • 服务器内存多大
  • MySQL 版本
  • 是 CPU / 内存 / IO 哪一类高
  • 是否有慢查询

我可以直接帮你看配置并给优化参数。

0 踩