连接池受限
前提:数据库部署在64GB的大内存物理机上,机器配置各方面都很高,然后连接这台物理机的Java系统部署在2台机器上,Java系统设置的连接池的最大大小是200,也就是说每台机器上部署的Java系统,最多跟MySQL数据库建立200个连接,一共最多建立400个连接,在使用过程中报错:too many connections
处理:
- 检查my.cnf文件,max_connections,设置的是800
- 既然最大连接这么大,为什么还报?使用命令show variables like ‘max_connections’得出结果是214
- 检查启动日志,发现报错:

日志显示无法设置成800,只能强行设置成214,追查到linux句柄,发现文件句柄数量限制为1024,导致最大连接只能214,mysql源码内部有写死,计算公式算出214。linux对进程的文件句柄限制太少的话,会导致没有办法创建大量的网络连接
执行ulimit -HSn 65535后,用cat /etc/security/limits.conf和cat /etc/rc.local检查最大文件句柄是否被修改
使用 ulimit -a查看进程被限制的资源量
core file size 进程奔溃时的转储文件的大小限制
max locked memory 最大锁定内存大小
open files 最大可以打开的文件句柄数量
max user processes 最多可以拥有的子进程数量
