登录接口压测响应慢频繁GC问题排查

登录接口压测响应慢频繁GC问题排查

2020.5.22

最近项目组针对几个较重要的接口进行了几十个小时的压测,发现登录接口的压测呈现了一种响应慢且越来越慢的趋势,CPU 也居高不下

压测情况

查看CPU占用情况如图所示:

登录接口压测响应慢频繁GC问题排查_第1张图片

找到对应服务包是鉴权服务(auth):

image.png

持续运行3小时的CPU占用曲线图: 登录接口压测响应慢频繁GC问题排查_第2张图片 结论:sc-auth包中的登录接口,占用CPU较高,需要优化。

排查思路

业务场景很简单,账号密码鉴权登录接口。

先排查为什么CPU占用率高

从top命令的结果发现。pid为15082的java进程CPU利用持续占用过高,达到了惊人的222.3%

登录接口压测响应慢频繁GC问题排查_第3张图片

定位问题线程

使用ps -mp pid -o THREAD,tid,time命令查看该进程的线程情况,发现该进程的15805到15099线程占用率都比较高

登录接口压测响应慢频繁GC问题排查_第4张图片

查看问题线程堆栈

# 将线程id转换为16进制
[root@app-03 ~]# printf "%x\n" 15085
3aed
[root@app-03 root]$ printf "%x\n" 15089
3af1

jstack查看线程堆栈信息
jstack命令打印线程堆栈信息,命令格式(pid为进程id,tid为线程):jstack pid |grep tid

[xx@app-03 root]$ jstack 15082 | grep 3af1
"Gang worker#3 (Parallel GC Threads)" os_prio=0 tid=0x00007ff54c05f800 nid=0x3af1 runnable 
[xx@app-03 root]$ jstack 15082 | grep 3aed
"Gang worker#0 (Parallel GC Threads)" os_prio=0 tid=0x00007ff54c05a000 nid=0

你可能感兴趣的:(Java,JVM,jvm,内存泄漏,GC)