引言
本文用于记录作者在centos7.9 Linux上安装meterSpherev1.20.9后,导致的MySQL连接数占满造成所有后端服务不可用的定位与修复过程。
问题现象
meterSpherev1.20.9 tls搭建参考上一篇。
安装完成meterSphere后,启动成功,所有服务状态全部正常,

但是此时访问halo博客页面报错“500服务内部错误”。

问题定位
初步排查
照例三板斧,日志、监控、工具,先从halo后端服务排查,

明显是数据库连接数过多。
进一步排查MySQL:


根因分析
在MySQL数据库服务器上查看连接,观察到是meterSphere所在服务器的IP地址占用的连接最多

问题已经非常明显了,meterSphere莫名其妙不断创建数据库连接,导致数据库连接占满,所有其他后端服务全部不可用。
但是meterSphere的docker服务状态都是正常的,如下图

进一步深入定位,排查meterSphere日志
进入容器ms-server,发现占用了300个连接

代码分析
从github下载源码


如下图,打开源码,查看properties文件中的数据库连接池配置,明显太大了

配置优化
由于meterSphere默认启动的两个连接池都是200个连接,容器启动初始化时创建大量连接,导致了MySQL数据库报错too many connections
因此考虑显示新增全局配置,覆盖properties文件中的连接池配置,
vim /opt/metersphere/conf/metersphere.properties
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.quartz.hikari.maximum-pool-size=30如下图

新增完成后重启

成果检验
连接数明显减低,如下图,从300个减到70个左右
