电话
400 9058 355
max_connections设得过高会导致连接失败,因资源超限触发OOM Killer或MySQL主动拒绝;应依据Threads_connected峰值设为1.5–2倍,配合thread_cache_size(4–16)、ulimit和somaxconn协同调优。
MySQL 启动时会为每个连接分配独立线程和内存(如 sort_buffer、join_buffer),max_connections 超出物理资源承载能力后,新连接可能因 Cannot allocate memory 或 Too many connections 被拒绝——后者是 MySQL 主动拦截,前者是 OS 层面 OOM Killer 干预。
实操建议:
SHOW STATUS LIKE 'Threads_connected'; 观察峰值,而非按应用服务器连接池大小硬设ulimit -n 和 /proc/sys/net/core/somaxconn
maximumPoolSize 应 ≤ max_connections × 0.8,避免雪崩式重连thread_cache_size 控制空闲线程缓存数量。当客户端断开,线程不立即销毁而是放入缓存;新连接到来时优先复用缓存线程,省去创建/销毁开销。但缓存过多线程会持续占用内存(每个线程约 256KB–1MB),且无实际收益。
判断是否需要调大:
SHOW STATUS LIKE 'Threads_created'; —— 若该值每秒增长 > 1–2,说明缓存不足,频繁创建新线程Threads_ca
ched:若长期稳定在 thread_cache_size 上限,说明当前值合理;若长期为 0 或极低,说明设高了也白搭单独调优 max_connections 或 thread_cache_size 容易误判。关键要看这两个状态变量的组合关系:
Connections 高 + Threads_created 持续上升 → 先加 thread_cache_size,再确认是否真需扩 max_connections
Connections 接近 max_connections 但 Threads_created 很低 → 说明连接复用好,瓶颈不在线程创建,可能是慢查询或锁等待Threads_connected 波动剧烈(如 10→300→20)→ 检查应用是否未正确关闭连接,或连接池配置不当(如 idleTimeout 过长)MySQL 的 max_connections 受限于系统级资源,即使配置文件写了 5000,也可能起不来:
ulimit -n 必须 ≥ max_connections + 300(预留日志、复制等后台线程)/proc/sys/net/core/somaxconn 影响 TCP 连接队列长度,低于 max_connections 时会出现连接超时(尤其突发流量)/etc/systemd/system/mysqld.service 中显式加 LimitNOFILE=65536
改完记得 systemctl daemon-reload && systemctl restart mysqld,否则内核限制没生效,MySQL 日志里也不会报错,只会默默降级运行。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...