在JAVA策略当中,Java应用中CPU使用率过高我们该怎么办呢?我们需要时刻清楚排查java应用中CPU使用率高或内存占用高这类问题,其实在整个运行过程中,排查步骤基本都是差不多的。当然了我们最好还是通过风月体验网中的一个实例来简单说明一下。

Java策略正确排查CPU使用率高

我们就假设:最近有个线上项目每天0点过后CPU使用率会上升至200%到300%。这种问题该如何利用Java应用中CPU使用率高或内存占用高来加以排查呢?​

1、我们都知道,当CPU再次暴涨的时候,首先我们可以通过top -c查看CPU使用率高的进程的PID。

2、然后使用top -p PID -H查看CPU使用率高的线程信息。如果CPU使用率高的线程是比较固定的,那么我们记下对应线程的PID。 执行top -p 14639 -H得出下图结果:

记下4个线程的PID: 14643、14644、14641、14642。在这一时间点里面,我们千万记得接下来通过jstack PID > xxx.log输出java应用当前堆栈信息到文件。

3、第2步中,我们记下了CPU使用率高的线程PID,现在将4个线程的PID转成16进制: 3933、3934、3931、3932。接着在jstack输出的堆栈文件里,搜索nid等于3933、3934、3931、3932的线程信息。再使用jstat -gc PID查看jvm的GC情况,连续执行4次jstat -gc 14639命令,发现FGC的数值变化比较快。这就说明Full GC确实执行很频繁。如下图:

4、这个时候可以看到CPU高的时候整个项目的内存占用1.3G左右。既然是内存问题,那么就需要使用jmap -histo:live PID > xxx.log分析下jvm内存存活对象的统计情况。

从图中可以看出,byte对象([B)内存占用特别高,而且出现了一个具体的类:ByteArrayRow。这是一个jdbc做查询时候封装数据用的一个类,这个类里包含有byte数组。通过这个统计结果初步怀疑是做数据库查询时候,查询了太多内容到了内存,导致了内存不足。由于统计中没有出现具体的业务类,所以就以为只是请求量比较大,导致的内存消耗过大。当时暂时将jvm的堆内存增大到2G。

5、应用jvm堆内存调大之后,到了0点还是出现了CPU高涨的问题。在此时我们可以利用大数据和云计算原理,对其进行质的改变。

内存占用了2G多,按照目前项目的请求量来说,2G内存不可能被占满了,所以说明并不是请求量大导致的结果,而是由于某块代码查询数据量过大导致的问题。

6、我们这个时候还是需要运行一遍命令,运行jmap -histo:live PID > xxx.log将内存对象统计情况输出到文件。结果如下图:

这次的输出结果出现了业务类MiniProgram_User_Info,那就可以针对这个业务类去排查异常代码的位置了。不过,除非比较清楚这个类具体使用的地方,否则即使出现了具体的类名还是比较难定位异常代码的位置。这时候,我们可以使用jmap -dump:live,format=b,file=xxx.hprof PID命令来输出内存对象的明细,来定位具体方法位置。这个命令是将内存里的所有信息都输出出来,输出的文件大小和内存大小基本一致。而且这个命令会导致应用暂时挂起,所以谨慎使用。

7、这次将内存明细输出之后,dump文件大小为2G。用jdk自带的jhat命令可以分析。之前分析其他dump文件用jhat还是比较方便的。不过,分析这次的dump文件,给了10G运行内存给jhat命令才勉强打开了文件:jhat -J-mx10G -port 7170。而且内存对象比较多,查找问题不方便。最后找到了一款神器: jprofiler。用jprofier分析dump文件需要的运行内存比较少,而且问题定位很方便。很快就定位出了内存中的大对象,占用了1G多内存的对象。这个时候我们就能够将这个问题轻松排查并解决了,服务器的效率也会显著地得到提升。

Java应用中CPU使用率过高该怎么解决相关推荐

  1. java事务占用内存吗,如何排查java应用中CPU使用率高或内存占用高的问题

    如何排查java应用中CPU使用率高或内存占用高的问题?这类问题的排查步骤基本通用的.现在通过一个具体的例子来说明. 问题描述 最近有个线上项目每天0点过后CPU使用率会上升至200%到300%. 排 ...

  2. mc服务器java占用过大_如何排查java应用中CPU使用率高或内存占用高的问题

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:MnameHZJ my.oschina.net/u/1420452/blog/224 ...

  3. linux下java多线程_Linux系统下Java问题排查——cpu使用率过高或多线程锁问题

    原标题:Linux系统下Java问题排查--cpu使用率过高或多线程锁问题 一个系统.特别是多线程并发的后台系统,在某些特定场景下,可能触发系统中的bug:导致cpu一直居高不下.进程hang了或处理 ...

  4. 解决 SQL Server 中 CPU 使用率过高的问题

    本文提供了诊断和修复运行 Microsoft SQL Server 的计算机上 CPU 使用率过高导致的问题的过程. 尽管在 SQL Server 中出现 CPU 使用率过高有许多可能原因,但以下原因 ...

  5. linux服务器 cpu使用率过高,服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...

  6. window服务器cpu过高的排查_服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...

  7. Linux服务器CPU使用率过高排查与解决思路

    日常工作中有时候会遇到Linux服务器上出现CPU负载过高的情况,影响程序的运行,一般的排除思路如下: 方法一: 使用top命令 然后按shift+p按照CPU排序,找到占用CPU过高的进程的pid ...

  8. Java 占用CPU使用率很高的分析

    前几天在测试服务器上发现Java进程的CPU使用率暴高,为了分析解决该问题,把过程记录如下: 1. 先找到Java的进程号 Linux下: 用top命令查看所有进程,可以明显看到Java的,因为CPU ...

  9. linux杀掉cpu使用率高的进程,如何解决Linux中CPU使用率高的问题?

    电脑死机了?还是开始听到电脑发出很响的CPU风扇噪音?Linux中CPU使用率过高的原因很多,但最常见的原因是运行异常的应用程序.本文介绍了如何在Linux中解决CPU使用率过高的问题. 找出罪魁祸首 ...

  10. samba服务器占用端口,SMB 服务器上的 CPU 使用率过高问题

    SMB 服务器上的 CPU 使用率过高问题 12/25/2019 本文内容 本文介绍了如何排查 SMB 服务器上的 CPU 使用率高的问题. 由于存储性能问题导致的 CPU 使用率过高 存储性能问题可 ...

最新文章

  1. java保留两位小数_java使double保留两位小数的多方法 java保留两位小数
  2. c 路径 空格 参数_好听的炫舞名字空格最新_好听的炫舞名字空格2020
  3. Linux系统函数read()/write()/pread()/pwrite()的区别
  4. python处理文本数据
  5. 【蓝桥杯官网试题 - 真题训练】生命之树(树形dp)
  6. 要提升asp.net工作能力。应急于提升的是哪些技术?
  7. 几种常用的排序方法7--希尔排序
  8. 智伴机器人三级分销模式_企业选择微信三级分销定制开发原因?
  9. Linux查看域名对应的ip地址
  10. zencart 对首页静态化处理
  11. C语言 汇总笔记(小甲鱼:带你学C带你飞)
  12. 怎么在中国杀死SAP
  13. 新手小白零基础,该怎样学习编程呢?
  14. SpringBoot 3.0 来啦!
  15. Stm32f103的can模块配置和调试
  16. python实现kmeans算法对图片的聚类分割
  17. 自然语言处理(九)——数据平滑
  18. All the Vowels Please
  19. 奇葩的传参 lt;p gt; 哈哈哈哈 lt;/p gt;
  20. Windows10连不上网报错代码

热门文章

  1. 博士申请 | 香港大学黄凯斌教授招收6G通信与机器学习方向全奖博士生
  2. BIDI SFP光模块和普通SFP光模块的介绍
  3. 百胜图Barsetto智能胶囊咖啡机测评 始于颜值忠于便捷
  4. Wechaty|微信小助手(非web|机器人)
  5. 如何删除“我的电脑”、“此电脑”中坚果云图标
  6. 跨专业考c语言程序设计,多位跨考大神,教你如何跨专业上岸
  7. 如何将chm格式转换成HTML网页格式
  8. Go 每日一库之 go-flags
  9. 数据库系统原理与应用教程(081)—— MySQL 视图(View)的创建与使用
  10. EOJ 1224 简单迷宫问题 bfs