CPU超过100%问题排查

出现了一台服务器接口访问太卡,甚至访问不通的问题。

排查了半天终于找出原因,现将过程分享如下:

1、Jps 查询java进程号,Bootstrap为tomcat线程

jps

2、top  查询各个进程cpu使用情况

top

3、top –p 46 查询46号进程单独的cpu使用情况

Shift + H 切换到该进程号内部各个线程的cpu使用情况,且按照CPU使用率逆序排列

4、pid 140 cup消耗大 查看该线程干什么

Printf %x 140   结果是:8c,  加上16进制标记0x,所以结果是:0x8c

使用jstack命令打印线程堆栈信息,找到其中nid=0x8c的线程堆栈。

jstack 46 |grep 0x8c –C30

Jvm的垃圾清理线程,非常耗资源。

查看垃圾清理情况:

jstat -gcutil 46

Full gc次数太多,耗时太长。

首先想到内存泄漏,所以要dump内存。

jmap -histo:live 46 | more

找到一个Entity对象,仔细分析该对象,不过是一个框架对象,会消耗内存,但是不会有内存泄漏这么严重的问题。

再仔细计算一下所占内存大小。

448750816 427M

156797632 149M

91792872  87M

MockEntity所占内存大小,13580840仔细计算 12.95M

排在前面的几个内存加在一起也才1G左右,一个8G内存的dock怎么会被1G内存撑到内存溢出了,首先怀疑的是内存设置过小,

此时通过jinfo pid 查询当前jvm内存设置,

命令为:jinfo 46

总大小设置为:

-Xmx1024M -Xms1024M -Xss512K

将其放大,问题解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值