jvm cpu过高排查实战

双十一了,头一天晚上10点左右收到阿里云cpu超过90%短信报警。

第二天上班了,开始处理,步骤如下:

1、top找出cpu高的java进程号9592

2、top -Hp  9592查看cpu占用time最高的线程编号28178

3、执行 printf "%x\n" 28178 获取线程十六进制地址6e12 (十六进制一定要小写)

 
4、执行 jstack 9592(pid)|grep  -10 6e12(线程十六进制号)


"http-bio-8121-exec-199" daemon prio=10 tid=0x00007f751804b800 nid=0x6e12runnab  le [0x00007f74ebcf9000]
   java.lang.Thread.State: RUNNABLE
        at com.ejavashop.model.seller.SellerTransportModel.getFee(SellerTransportModel.java:387)
        at com.ejavashop.model.seller.SellerTransportModel.calculateTransFeeFuil  (SellerTransportModel.java:312)
        at com.ejavashop.model.cart.CartModel.getCartInfoByChooseId(CartModel.ja  va:1134)
        at com.ejavashop.service.impl.cart.CartServiceImpl.getCartInfoByChooseAn  dId(CartServiceImpl.java:201)


5、排查代码SellerTransportModel.java:387

     for (int i = 0; i < surplus; i += addWeight) {
                 price = price.add(new BigDecimal(addFee));//此线程一直在执行这一行代码。。。也就是说死循环原因导致cpu一直高
             }


6、修改代码

 //计算多出的钱
        if(addWeight!=0){//线上死循环了
             for (int i = 0; i < surplus; i += addWeight) {
                 price = price.add(new BigDecimal(addFee));
             }
        }

   7、打包测试,紧急上线,over

   原地址: http://blog.csdn.net/bolg_hero/article/details/53126744

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值