JVM调优 CPU飙高查询方法

背景:生产环境,当服务1重启后,CPU会彪高,然后生产环境告警。

1、服务器抓去进程中占用CPU最高的线程,查看当前引用进程信息,包括内存与CPU占用百分比

用Top命令执行查看使用最高的CPU,得到PID(比如“30410”)

ps aux |grep PID(查询进程所在服务,PID-进程号,TID-线程号)

就清楚是哪个服务发生的CPU飙高了。

2、jstat -gc pid 1000 15(查看FGC、FGCT,如果一秒内超过1次,算是高了,41947-41945=2)

3、打印3次该进程中CPU占比高的线程    top -b -n 3 -Hp PID(查看第2或者第三次)

4、拿到CPU占用高的线程,需要转16进制后,就可以查询打印的堆栈信息,看具体线程信息

打印该进程堆栈信息(Java命令需要确认是否服务器能直接调用,不行则需要到jdk目录下执行)。

jstack $pid(可以使用jstack $pid >>$url将堆栈信息打印到该文件中,使用十六进制的线程号查看自己的类即可,底层源码暂不用管)

根据转16进制后的线程号去查询出占用CPU最高的信息找到相关的类

可用命令转16进制

printf "%x\n" 24740

这一步之后就知道具体问题在哪个类中的哪个方法了,具体分析。

比如我们的就是在重启的时候,dubbo消费者会循环调用生产者的信息,每次启动都会订阅所有同类接口,导致了一直占用资源。

修改方式:公司原架构是,生产者有多个服务,且都是用的同一套接口(名称),修复后为,不同的接口用不同的interface。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值