惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
C
CERT Recently Published Vulnerability Notes
V
Visual Studio Blog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
博客园 - 聂微东
L
Lohrmann on Cybersecurity
P
Proofpoint News Feed
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
AI
AI
S
Security @ Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
Jina AI
Jina AI
W
WeLiveSecurity
大猫的无限游戏
大猫的无限游戏
腾讯CDC
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
宝玉的分享
宝玉的分享
AWS News Blog
AWS News Blog
月光博客
月光博客
P
Palo Alto Networks Blog
小众软件
小众软件
V2EX - 技术
V2EX - 技术
罗磊的独立博客
V
Vulnerabilities – Threatpost
J
Java Code Geeks
H
Heimdal Security Blog
S
SegmentFault 最新的问题
博客园 - 【当耐特】
Cyberwarzone
Cyberwarzone
S
Schneier on Security
博客园_首页
T
The Exploit Database - CXSecurity.com
Attack and Defense Labs
Attack and Defense Labs
Forbes - Security
Forbes - Security
N
News | PayPal Newsroom
IT之家
IT之家
Project Zero
Project Zero
Help Net Security
Help Net Security
P
Privacy International News Feed
爱范儿
爱范儿
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threat Research - Cisco Blogs

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 麒麟 7.6 安装谷歌 OTP 认证模块 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | 自动更新系统代理 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist shell | 检测网站存活并自动钉钉告警 Zabbix | 监控端口连通性并自动追踪 TCP 路由 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小 shell | centos 初始化 loki (二) 部署 loki (一) 简介 prometheus (六) Alertmanager prometheus (五) 记录规则与告警规则 prometheus (四) 黑盒监控 prometheus (三) 服务发现 prometheus (二) 静态配置 prometheus (一) 简介及部署 traefik (四) TraefikService 服务 traefik (三) Middleware 中间件 traefik (二) ingressRoute 路由 traefik (一) 简介、部署和配置 kubernetes | Gateway API 简介及部署 linux | dns 配置文件中 search 和 options ndots 详解 kubernetes | command args 和 dockerfile 中的 ENTRYPOINT CMD kubernetes | statefulset 控制器详解 docker | dockerfile 最佳实践 docker | dockerfile 指令详解 linux | kill 命令详解以及 linux 中的信号 troubleshooting | elasticsearch 安装插件报错 shell | if 条件判断 docker | 下载外网镜像的几种方式 python | 鬼谷子数学问题 steam挂刀教程 linux | history 命令的格式化输出 shell | 将本地镜像批量推送到 harbor windows | hosts 文件修复 kubernetes | configmap & secret kubernetes | RBAC 鉴权和 NetworkPolicy kubernetes | service & ingress kubernetes | 存储 kubernetes | 滚动升级和自动伸缩 kubernetes | 控制器 kubernetes | 日志 kubernetes | 调度 kubernetes | pod kubernetes | 杂记 linux | set 命令详解 ceph | openeuler 部署 ceph-v16 ceph | ceph-v16 离线安装解决方案 pxe 如何应对复杂的服务器硬件环境 python | 批量修改目录下文件名 《微习惯》 ceph | openeuler (aarch64) 部署 ceph-v16 troubleshooting | glibc 误升级后修复 pxe 安装配置大全 《人间失格》 跑步日常 [置顶] Hello, hugo! shell | 检索某 url 中所有文件的内容 shell | 不同执行方式的区别 shell | 开启 debug 模式 vscode | 常见问题 windows & linux 多网卡时设置默认路由以及添加静态路由 mysql (二) 主从复制原理 GTID 并行复制 mysql (一) 部署 mysql | 杂记 cicd | jenkins 部署 mall-swarm 项目 httpd 源码打包编译成 rpm 包 openssl 源码打包编译成 rpm 包 centos7 | 修改网卡名称 ceph | pool pg_num 配置 docker | 脚本方式批量导出/导入镜像 centos 密码尝试次数过多问题处理 centos7 | 升级内核至 5.10 CVE-1999-0526 ceph | centos7 部署 ceph-v12 python | 修改 pip 源 troubleshooting | 安装 cloud-init 后导致 ssh 连接失败 windows | autohotkey 常用脚本
mysql | 线程上限问题处理
lvbibir · 2025-04-22 · via lvbibir's Blog

0 前言

前段时间应业务需求, 在 suse12sp5 系统上部署了一套 Mysql 8 数据库, 刚开始运行良好, 随着依赖此数据库的功能越来越多, 开发同事反应在应用连接数据库时频繁报错:

[HY000][1135] null, message from server: "Can't create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug"

在数据库服务器使用 root 账户登陆报相同错误, 同时在 mysql 错误日志有大量 innodb 无法创建扫描线程的报错

2025-04-21T22:10:29.220410+08:00 381 [Warning] [MY-013526] [InnoDB] Resource not available to create threads for parallel scan. Falling back to single thread mode.

1 排查过程

可以看到报错中明确指出了可能是由于内存不足, 遂排查服务器内存占用情况, 但是服务器内存压力很小, 不存在 oom 的问题

mysql 这类资源问题大多是因为 max_connections 的参数配置过小, 请开发人员关停一部分服务释放线程我们登陆 Mysql 进行排查

SHOW VARIABLES LIKE 'max_connections'; ---3000

初始配置已经比较合理, 该参数配置为 3000

继续向下排查, 在查阅相关资料的时候发现了 这篇文章, Max_used_connections 达到 max_connections 数值的 10% - 85% 比较合理

SHOW STATUS LIKE 'Threads_connected';     --- 目前已连接的线程
SHOW STATUS LIKE 'Max_used_connections';  --- 启动以来使用的最大链接数
SHOW VARIABLES LIKE 'max_connections';    --- 链接数上限
--- 三个值分别为 472 473 3000

mysql 链接数是完全够用的, 那可能是优化没有做好导致 mysql 无法支持更多连接, 遂进行如下性能优化

  1. ulimit -a 发现系统默认配置为 1024, 在系统 /etc/security/limits.conf 中配置 ulimit 之后重启服务器.

    * soft nofile 65535
    * hard nofile 65535
    * soft nproc 65535
    * hard nproc 65535
    
  2. 系统内核线程限制

    # Mysql 当前的线程数
    ps -T -p $(pgrep mysqld) | wc -l
    cat /proc/sys/kernel/threads-max
    cat /proc/sys/kernel/pid_max
    echo 65535 > /proc/sys/kernel/threads-max
    echo 4194304 > /proc/sys/kernel/pid_max
    
  3. mysql systemd 配置

    systemctl status mysql
    vim /usr/lib/systemd/system/mysql.service
    
    # [service] 下添加如下配置
    LimitNOFILE = 65535
    LimitNPROC = 8192
    LimitSTACK = 512K
    
    systemctl daemon-reload
    systemctl restart mysql
    
  4. msyql service 配置, 添加或修改如下参数

    [mysqld]
    thread_stack = 192K
    sort_buffer_size = 256K
    read_buffer_size = 256K
    read_rnd_buffer_size = 256K
    

此时博主心态已经快崩溃了, 服务器重启了, Mysql 服务也重启了很多次, 想到的系统限制或者性能优化的地方都做过了, 报错依然是频频出现.

只好整理思路从头开始, 在观察 Mysql Status 数据的时候发现一个小细节, Max_used_connectionsThreads_connected 这个值永远保持在 472-473 !!!!!!!

思路一下就明确了, 联想到刚才在系统上查看 Mysql 的线程数, 发现这个值一直是 512

ps -T -p $(pgrep mysqld) | wc -l

所以并不是性能优化或者 Mysql 本身的配置有问题, 一定是某一项系统配置, 限制死了 Mysql service 能创建的线程数

按照这个思路去问各大 AI, 通义/豆包/DS 给出的结果都跟我之前的排查过程相差不多, 没有找到问题点, 最后还是 DS 出世后被大家淡忘的 ChatGPT 给出了解决方案

执行后, 结果是 512, 跟上文在系统上查看到的 Mysql 线程数一致, 那就是这里的问题了

cat /sys/fs/cgroup/pids/system.slice/mysql.service/pids.max

2 解决方案

修改 Mysql service 的 systemd 配置文件

vim /usr/lib/systemd/system/mysql.service

# 在 [Service] 块添加或修改
TasksMax = infinity

systemctl daemon-reload
systemctl restart mysql

以上.

wechat_pay

微信

alipay

支付宝