java程序cpu持续飙升

一天的晚上,开始收到告警信息,某某系统cpu使用率超过85%,查看3天cpu使用率基本都正常在7-8%区间,以为正常的大查询造成的瞬时值,持续观察发现没有下降的趋势,后续做暴力重启没用,联系开发一并排查

堆栈信息
1. 先top实时找到最高的pid
[root@test ~]# top
top - 11:07:59 up 129 days,  1:46,  2 users,  load average: 3.74, 2.80, 1.72
Tasks: 399 total,   1 running, 398 sleeping,   0 stopped,   0 zombie
%Cpu(s): 40.4 us,  4.8 sy,  0.0 ni, 54.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 16265576 total,   502764 free, 10555140 used,  5207672 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  5287684 avail Mem 

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                      
1647  root      20   0 7186604 122428  19016 S 323.5  0.8   0:02.03 java          



2.  通过进程发现为tomcat服务
[root@test ~]# ps -fe |grep 1647
root     1647  0 Sep25 ?        00:18:12 /usr/local/jdk1.8.0_152/jre/bin/java 
-Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djdk.tls.ephemeralDHKeySize=2048 
-Djava.protocol.handler.pkgs=org.apache.catalina.webresources 
-Dorg.apache.catalina.security.SecurityListener.UMASK=0027 
-Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat 
-Dcatalina.home=/usr/local/tomcat 
-Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start



3. 打印堆栈信息
[root@test ~]#  jstack 1647 > 1647.log



4. 找出进程中最高的线程id
[root@test ~]#  top -Hp 1647 | head -n 20



5. 将线程id转换为16进制
[root@test ~]# printf "%x\n" 4239
108f
[root@test ~]# cat 1647.log | grep 108f
"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007efed8022800 nid=0x108f runnable
上述发现为gc异常



6. 实时查看gc状态(实时查询发现gc年轻代不能正常回收释放,后续发生FGC导致程序的不可用)
[root@test ~]# jstat -gcutil 1647 3000
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  ....
  0.00  40.62  92.81  93.73  96.40  94.47   17   1.027     4    1.429   2.546
 75.00   0.00  15.84  93.76  96.40  94.47   17   1.122     5    2.129   4.550
 75.00   0.00  40.05  93.76  96.40  94.47   18   1.242     6    3.429   5.550
 62.50   0.00  27.74  93.82  96.40  94.47   21   1.570     7    3.429   7.558
 62.50   0.00  70.02  93.82  96.40  94.47   23   2.236     8    12.429  10.558
  0.00  0.00  100.00  99.98  96.60  94.47   23   2.236     10   15.429  14.563
  0.00  0.00  100.00  99.98  96.60  94.47   23   2.236     11   20.429  17.563
  0.00  0.00  100.00  99.98  96.60  94.47   23   2.236     12   24.429  18.563
参数说明
S0新生代 0区使用占比
S1新生代 1区使用占比
E新生代使用占比
O老年代使用占比
M元数据使用占比
CCS压缩使用占比
YGC年轻代垃圾回收次数
YGCT年轻代垃圾回收时间(秒)
FGCFGC次数
FGCTFGC时间(秒)
GCT总垃圾回收时间(秒)
堆快照
jmap -dump:live,format=b,file=1647.hprof 1647

然后使用工具(MemoryAnalyzer)导入文件进一步分析,工具这快不是很懂,等后续熟悉在补充
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值