在1核1G的云服务器环境下,MySQL默认的最大连接数(通常是151)通常需要调整,但不是调高,而是应该调低。以下是详细分析和建议:
为什么需要调整?
1. 内存限制
- 1核1G服务器内存有限(实际可用约800MB-900MB)
- 每个MySQL连接需要约2-8MB内存(取决于配置和负载)
- 151个连接可能消耗300MB-1.2GB内存,容易导致OOM(内存溢出)
2. 性能考虑
- 过多的并发连接会导致CPU上下文切换频繁
- 内存不足时可能触发SWAP,性能急剧下降
- 实际业务中,1核1G服务器通常不需要那么多连接
推荐配置
阿里云/腾讯云1核1G环境建议:
# MySQL配置文件(my.cnf/my.ini)
[mysqld]
max_connections = 50-80 # 建议范围
# 或更保守的设置
max_connections = 30-50 # 小型应用足够
# 其他相关优化
thread_cache_size = 8
table_open_cache = 200
具体建议值:
- Web应用:50-80
- 小型网站/个人项目:30-50
- 微服务/API后端:20-40
- 如果使用连接池:可设为
(应用实例数 × 连接池大小) + 10
检查当前连接使用情况
-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';
-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';
-- 查看历史最大连接数
SHOW STATUS LIKE 'Max_used_connections';
调整方法
临时调整(重启失效):
SET GLOBAL max_connections = 50;
永久调整:
-
修改配置文件:
# 编辑配置文件 vim /etc/my.cnf # 添加或修改 [mysqld] max_connections = 50 -
重启MySQL:
systemctl restart mysqld # 或 service mysql restart
监控建议
调整后需要监控:
- 内存使用:确保不超过80%
- 连接数峰值:
Max_used_connections应低于设置值 - 响应时间:确保没有明显延迟
其他优化建议
除了调整连接数,1核1G环境还应:
# 内存相关优化
key_buffer_size = 16M
query_cache_size = 0 # MySQL 8.0已移除,5.7可设为小值或0
innodb_buffer_pool_size = 128M # 重要!根据内存调整
# 连接相关
wait_timeout = 300
interactive_timeout = 300
总结
必须调整,方向是降低最大连接数,建议设为30-80之间,具体取决于:
- 应用类型和并发需求
- 是否使用连接池
- 是否有其他服务运行在同一服务器
调整后需持续监控系统资源使用情况,避免因连接数过高导致服务器崩溃。
CLOUD技术笔记