排查:Mysql连接池

  • 连接数据库的Java应用的Druid数据库连接池,配置的最大连接数是400
  • 配置文件my.cnf,参数max_connections,配置的是800
  • 但实际上Mysql只建立使用了214个连接,指令:show variables like ‘max_connections’
  • 通过查看mysql启动日志,发现mysql将最大连接数限制为来214
    • image.png
  • 原因:linux将进程可以打开的文件句柄数限制为1024,导致mysql最大连接数受限

    解决

  • 修改最大文件句柄数:ulimit -HSn 65535

  • 检查是否生效:
    • cat /etc/security/limits.conf
    • cat /etc/rc.local
  • 调整my.cnf的max_connections参数,然后重启mysql服务
  • 214的由来:mysql源码内部写死的

    ulimit

  • linux默认会限制每个进程对系统资源的使用,包括可以打开的文件句柄、可以打开的子进程数、网络缓存、最大可以锁定的内存大小等

  • 避免某个进程耗尽操作系统所有的资源
  • 所以生产环境部署中间件系统时候,都需要调整一下Linux内核参数,比如ulimit
  • ulinit -a可以看到每个进程被限制资源的情况