起因

在项目现场发现,程序运行的过程中,发现会时不时有cpu占用400%以上的情况,而通过界面很难定位到触发了哪里导致的,不能缩小分析范围。

收集数据

于是使用了以下几种方式采集数据:
1、对jar包配置jmx参数进行暴露,在重启即可使用jdk的jvisualvm.exe进行远程监控
2、下载阿里的arthas进行监控。
以上两种方式的使用方法就不多说了,请大家自行百度。

分析

一般对于jvm问题,不外乎就两种表现现象,一种就是堆内存占太多没有被释放,一种就是cpu占用过高。
堆内存太多导致堆溢出的原因有很多种,大概就是资源没释放,存在内存的数据量过大等问题导致。而cpu过高一般是程序在执行某段代码执行过长,且一直在计算,要么进入了死循环,要么计算的量太大,导致占用cpu过高。
当然还有死锁的现象,不过这种得看具体线程的状态。

先从大点分析,cpu过高,应该数据计算类问题,那么就得看是那个线程占用了cpu,通过arthas的dashboard查看某个线程后,使用thread 线程号,即可看出该线程运行的代码到哪一步,查看后发现是停在了某个for循环代码中,于是检查那个for循环,发现for(int i=1;i<pages;i++) 这个pages的值是由int pages=(int)Math.ceil((double)total/(double)pageSize)来的,而当pageSize=0时,就会出现int的最大整数2147483647,这个数字使得在for循环转了半天。
那为什么pageSize会等于0呢,是因为前端传入了pageSize为0,而后端没有判断如果为0则给默认值的情况,所以这块就直接过了,那继续问下去,为什么前端会传0呢,按道理一般写法会给分页一个默认值的,了解到后是因为前端想拿所有的数据,而之前对接时想拿所有数据就是这样传的,因为pagehelper的分页如果接收pageSize和pageNum为0的情况下,会查所有记录。那为啥这次想获取所有数据又是采用了分页的做法来获取呢,不搞分页不就行了吗?后面得知是后端这么设计,但前端发现后没提出异议,直接就这么做了,不过与本文就没太大关系了。

结论

在修改了接口后,线上的cpu占用过高问题就结束了,本次只用了arthas的一部分功能,实际上很多功能还没能用到,看官方介绍说明还是很有用处的,有需要的同学可以自己模拟错误情况试一下。

jvm cpu占用过高实例以及排查方法相关推荐

  1. CPU占用过高问题的排查及解决

    CPU占用过高问题的排查及解决 排查步骤 1.使用top 定位到占用CPU高的进程PID      然后按shift+p按照CPU排序 2.查看Java进程里面的线程的占用情况 或者是再用ps -mp ...

  2. 一种CPU占用过高的故障定位分析方法

    目 录 1.前 言 2. 测试类编写 3. 故障定位方法 3.1 定位CPU占比最高的PID 3.2 定位该PID对应的应用程序名字 3.3 定位具体的线程ID 3.4 定位具体的应用程序代码位置 4 ...

  3. java 一次CPU占用过高问题的排查及解决,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  4. java cpu 占用率高_java实战CPU占用过高问题的排查及解决

    最近一段时间 某台服务器上的一个应用总是隔一段时间就自己挂掉 用top看了看 从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID top 2. ...

  5. POI导出数据至Excel,cpu飙升 cpu占用很高,原因排查

    零 干货满满 1测试环境开启GC日志 -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+HeapDumpBeforeFull ...

  6. 假如生产环境出现CPU占用过高,如何排查与定位

    1. 先用top命令找出CPU占比最高的,如下图最高的为java应用,pid为3989          2.用ps –ef或者jps进一步定位,得知是一个怎样的一个后台程序 ps -ef | gre ...

  7. CPU占用较高及CPU占用不高但无响应问题排查小记

    CPU占用不高但交易无响应排查 使用top -c 查看CPU使用情况 发现cpu占用不高,继续排查 使用jstack 应用进程号查看日志 发现ThreadA.ThreadB互相等待对方释放锁资源导致了 ...

  8. 性能优化-CPU占用过高问题排查

    1. 性能优化是什么? 1.1 性能优化就是发挥机器本来的性能 1.2 性能瓶颈在哪里,木桶效应. CPU占用过高 1.现象重现 CPU占用过高一般情况是代码中出现了循环调用,最容易出现的情况有几种: ...

  9. java cms cpu占用率_cpu使用率过高和jvm old占用过高排查过程

    今天断断续续的收到管理平台的异常报警,cpu占用过高和jvm old占用过高,这个时候赶紧去排查原因,下面记录了我的排查过程,可能里面还有不正确的地方,欢迎各位大佬指正,也欢迎大家关于类似的案例一起交 ...

最新文章

  1. session和cookie的区别和联系---转载
  2. 奇葩面试经历分享:喊价25K,HR 却给了30K!
  3. nexus搭建和迁移
  4. luogu P4725 多项式对数函数 (模板题、FFT、多项式求逆、求导和积分)
  5. 我的第一个oracle触发器
  6. 使用STAD研究product搜索和保存的性能
  7. 软件设计师习题笔记-重点习题五
  8. intval0.57100 php_关于PHP浮点数之 intval((0.1+0.7)*10) 为什么是7
  9. HDOJ--1864--最大报销额
  10. 利用ACIS、HOOPS开发三维软件
  11. 服务器登录显示sa登录失败,U8应用服务器配置时提示登录SA失败发现是由于未能找到存储过程‘sp_password’的解决方案...
  12. Cygwin的安装教程
  13. matlab幂函数回归分析,求助matlab种幂函数回归 这样的:
  14. CURL命令参数详解
  15. Unable to set localhost. This prevents creation of a GUID. Cause was: cloud: cloud java.net.UnknownH
  16. Win10图片打不开文件系统错误2147416359解决方法
  17. mutillidae(owasp10)数据库报错
  18. Hulu在Content Embedding的探索与实践
  19. 微信公众号开发报错:错误代码:40164, 错误信息:invalid ip
  20. 两句css 搞定页面滚动时的卡顿问题?

热门文章

  1. 荣耀v8 android8,荣耀V8和荣耀8对比评测:荣耀V8真的会尴尬?
  2. XDGEUnity XDGEPipeLine
  3. 记第一次训练出深度学习模型并成功预测结果
  4. A/B OTA update 错误
  5. word2016无法打开Visio对象
  6. 拼多多新店一次可以上几种产品呢?
  7. 国务院办公厅发文,电子签名、电子印章再迎利好
  8. java中map里面的key按我们插入进去的顺序输出
  9. java实现第七届蓝桥杯方格填数
  10. 游戏策划学习:乱敏、mmo、跳跃表现