kavin

你要偷偷学会排查线上CPU飙高的问题,然后惊艳所有人!

kavin 运维技术 2022-11-11 440浏览 0

你要偷偷学会排查线上CPU飙高的问题,然后惊艳所有人!

前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右。

因为最近接入了新的业务,业务方给出的数据是日常QPS可以达到2000,大促峰值QPS可能会达到1万。

所以,为了评估水位,我们进行了一次压测。压测过程中发现,当单机QPS达到200左右时,接口的rt没有明显变化,但是CPU利用率急剧升高,直到被打满。

你要偷偷学会排查线上CPU飙高的问题,然后惊艳所有人!

压测停止后,CPU利用率立刻降了下来。

于是开始排查是什么导致了CPU的飙高。

问题排查与解决

在压测期间,登录到机器,开始排查问题。

本案例的排查过程使用的阿里开源的Arthas工具进行的,不使用Arthas,使用JDK自带的命令也是可以。

在开始排查之前,可以先看一下CPU的使用情况,最简单的就是使用top命令直接查看

top-10:32:38up11days,17:56,0users,loadaverage:0.84,0.33,0.18
Tasks:23total,1running,21sleeping,0stopped,1zombie
%Cpu(s):95.5us,2.2sy,0.0ni,76.3id,0.0wa,0.0hi,0.0si,6.1st
KiBMem:8388608total,4378768free,3605932used,403908buff/cache
KiBSwap:0total,0free,0used.4378768availMem
PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND
3480admin20075656242.9g8976S241.235.8649:07.23java
1502root200401768402289084S1.00.539:21.65ilogtail
181964root20037564081043928464S0.71.20:39.38java
496root2002344224141084396S0.30.252:22.25staragentd
1400admin20021769522291565940S0.32.731:13.13java
235514root39192204632157046844S0.30.255:34.43argusagent
236226root2005583693046888S0.30.112:01.91systemd-journ

可以看到,进程ID为3480的Java进程占用的CPU比较高,基本可以断定是应用代码执行过程中消耗了大量CPU,接下来开始排查具体是哪个线程,哪段代码比较耗CPU。

首先,下载Arthas命令:

curl-Lhttp://start.alibaba-inc.com/install.sh|sh

启动

./as.sh

使用Arthas命令"thread -n 3 -i 1000"查看当前"最忙"(耗CPU)的三个线程:

你要偷偷学会排查线上CPU飙高的问题,然后惊艳所有人!

继续浏览有关 系统运维 的文章
发表评论