记录一次CPU飙升的排查过程

背景

该服务主要提供给各个第三方委外渠道的应用进行查询交费操作。在非请求高峰时段,出现CPU飙升的现象,由于此前曾出现此类情况,线上保留了现场,提供排查的条件。

服务器资源

  • CPU : 16核
  • 内存 : 32G

项目技术架构

  • SpirngBoot 2.0.1.RELEASE
  • SpringJPA + Mysql
  • sharding-jdbc_4.0.0-RC2 (分表框架)

负载情况

CPU 使用率

在这里插入图片描述
从Zabbix监控上,我们可以看到服务器CPU 从18点50分瞬间飙升,飙升后CUP使用率基本维持在80%左右。在19点17分左右,CPU再度飙升,此后CPU使用率接近100%。

内存使用率

在这里插入图片描述
服务器内存在18点50分左右,被吃掉了接近2G.并且没有释放的现象。

排查步骤

  1. 通过TOP命令查询到当前服务的【PID】,获得当前服务PID为14564, 且CPU一致被吃着。.
    在这里插入图片描述
  2. 通过top -b -n 1 -Hp 【PID】 命令获取该服务的详细信息, 可以看到有10多个线程一直占用着CPU。
    在这里插入图片描述
  3. 使用java虚拟机自带的堆栈跟踪工具jstack, 输出当前服务各个进程的堆栈明细。我是使用命令 jstack [-l] ,查看服务的活动线程。通过命令 jstack -l 14564 得到以下信息
执行: jstack -l 14564
 
"Attach Listener" #18182 daemon prio=9 os_prio=0 tid=0x00007f901c00a800 nid=0x63cb waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"http-nio-8300-exec-424" #17350 daemon prio=5 os_prio=0 tid=0x00007f8f00082800 nid=0x6455 waiting on condition [0x00007f8ec76f5000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x000000067494f870> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
	at java.util.concurrent.locks.Ab
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值