线上mysql数据库连接数监控如图,日常已经在较高水位,有一次流量毛刺,直接导致连接数达到上线,jdbc连接池无法创建新的连接,导致服务可用性急剧下降。
事后分析过程如下:
1.从mysql角度分析哪些IP连接数比较大,尤其是容器部署,这里显示的都是宿主机IP,每台宿主机上的容器数或多或少,这里仅供参考
2.分析单个容器实例的连接数,单台60个连接
3.使用arthas分析datasource的连接数,发现单个datasource的maxpoolsize=20,分析配置文件发现总共初始化了三个datasource,和容器内的mysql tcp scoket数匹配。
4.再次分析,发现该数据库总共有多个实例组连接,汇总起来的实例数超过50,和3k多的总连接数吻合
至此,问题已经分析出来,后面考虑如何合并datasource和减少实例组实例数来解决问题了。
另外,为了防止连接数打满导致的应用可用性下降,运维侧也需要针对连接数使用情况做监控,建议阈值超过50%和80%做2个级别的告警。