- 有一个朋友找上我,让我帮忙看看他们的系统,一到账单推送时,用户就无法打开账单,重新启动程序可恢复服务,但一到推送,就是无法查询账单。
我第一时间考虑是否高并发导致资源耗尽,但检查数据库、jvm内存、带宽情况时却发现远远未到会卡顿的情况,询问得知,就查询账单接口无法访问,其他服务都正常。在检查jvm线程情况时,发现大量TIMED_WAITING的线程,如下图:
第一时间开考虑数据库线程池超载,查看mysql的连接数,远未达设置数。考虑是hikari连接池配置存在问题,如下:
hikari:
is-read-only: false
connection-timeout: 60000
idle-timeout: 60000
validation-timeout: 3000
max-lifetime: 60000
max-pool-size: 60
min-idle: 10
修改为:
hikari:
is-read-only: false
connection-timeout: 60000
idle-timeout: 60000
validation-timeout: 3000
max-lifetime: 60000
max-pool-size: 600
min-idle: 10
服务在推送时,能正常使用。