CPU居高不下,数据库连接激增,运行连接很少

现象
cpu居高不下
数据库总连接数增加 运行连接2个,无任何压力
应用报警获取不到数据库连接
应用监控显示系统98%的时间在做业务逻辑处理

分析
执行top命令找到cpu高的应用pid 为 67725
执行 top -Hp  67725 找到线程cpu占用最大的 线程 68178
线程 68178 转换为16进制   10a52
执行 jstack  67725 |grep -A 10 10a52  或者 先把线程信息输入到文件里面 jstack -l 67725 > 1.txt

分析发现

"consumer_split_calc_apply_jmq1_1620617277453" #207 daemon prio=5 os_prio=0 tid=0x00007f12307e5800 nid=0x10a52 runnable [0x00007f12068d9000]
   java.lang.Thread.State: RUNNABLE
    at com.test.my.driver.support.sqllog.BasicFormatterImpl$FormatProcess.perform(BasicFormatterImpl.java:103)
    at com.test.my.driver.support.sqllog.BasicFormatterImpl.format(BasicFormatterImpl.java:64)
    at com.test.my.driver.support.sqllog.FormattedLogger.logSQL(FormattedLogger.java:30)
    at com.test.my.driver.support.sqllog.LogSqlUtils.doLog(LogSqlUtils.java:78)
    - locked <0x00000000c4a94c58> (a java.lang.Class for com.test.my.driver.support.sqllog.LogSqlUtils)
    at com.test.my.driver.support.sqllog.LogSqlUtils.doLogElapsed(LogSqlUtils.java:68)
    at com.test.my.driver.support.sqllog.LogSqlUtils.logElapsed(LogSqlUtils.java:62)
    at com.test.my.driver.support.sqllog.LogSqlUtils.logElapsed(LogSqlUtils.java:57)
    at com.test.my.driver.jdbc.MyStatement.logSql(MyStatement.java:2021)
  说明卡在了打印日志的逻辑 经过排查发现 LogSqlUtils 打印日志为synchronized 而且是静态方法 类级别全局锁定 所以链接一直释放不了 导致上述问题

解决
  去掉打印日志部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值