b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java进程cpu占用过高该如何排查?-苏州安嘉

电脑杂谈  发布时间:2021-04-13 06:02:11  来源:网络整理

问题:

在公司参与硬件过程中,该项目的两台主动-主动jboss服务器频繁触发高CPU使用率警报,并且长时间以来CPU使用率超过90%。

疑难解答:

第一步:在两台Linux服务器上,执行top命令并按cpu利用率按大写P排序,并将cpu占用率最高的进程确定为java进程

那么,如何解决java进程的CPU使用率过高的问题?我们从两个角度开始:

(1)执行任务本身的java线程本身有错误,无限循环或操作本身消耗了cpu,导致cpu的使用率很高

([2) jvm出现频繁的gc,导致cpu很高

第二步:首先检查Java任务线程本身,以确定哪个线程占用了CPU太多

(1)方法1:ps -mp [java进程ID] -o THREAD,tid,time | sort -n查找具有最大CPU使用率的线程ID

cpu突然占用过高

请注意,此方法已在生产环境中进行了测试,结果发现找不到cpu占用率高的线程。所有线程均显示cpu占用率为0。因此,实际调查采用方法二

(2)使用top -H -p [java进程ID]查找具有较高CPU使用率的线程ID,如下图所示,左侧红色框中标记的PID被列为该线程ID

cpu突然占用过高

第3步:计算Java线程ID的十六进制值,因为在用jstack查看的后续线程快照中,线程ID是小写的十六进制值

([1)可以转换为百度基础

([2)可以使用Windows附带的计算器,程序员模式,可以转换十六进制

([3) Linux可用命令:printf“%x \ n” [thread_id]

第4步:使用命令jstack [java process pid] | grep [线程ID十六进制值] -A 30(-A 30表示向下打印30行)

cpu突然占用过高

分析上图,我们可以看到该线程正在进行常规匹配。检查完整的堆栈以找到特定的代码位置。经过分析,确定该URL正在进行常规匹配。继续分析其他线程,发现它们基本上在进行URL常规匹配。

跟进分析需要与业务代码分析相结合,以确定常规匹配是否耗时。

常规分析参考博客:

步骤5:从GC的角度来看,是否有大量的GC,首先确定当前的内存消耗,使用top命令或检查设备监控管理系统,确认内存利用率达到97。 %:

cpu突然占用过高

第6步:确认gc的数量,使用命令jstat -gc [java进程ID]:

YGC表示YoungGC,也称为次要GC,它是新一代的GC

FGC,代表FullGC,这是发生在较早的时期的

S0C:第一个幸存区域的大小

S1C:第二个生存区的大小

S0U:第一个幸存区域的已用大小

S1U:第二个生存区的已用大小

EC:伊甸园的大小

欧盟:伊甸园的使用规模

OC:老年年龄

OU:老年使用的尺寸

MC:方法区域大小

MU:方法区域使用的大小

CCSC:压缩的类空间大小

CCSU:压缩的类空间使用量

YGCT:年轻一代垃圾回收会浪费时间

FGCT:晚年收集垃圾会浪费时间

GCT:垃圾回收消耗的总时间

如何计算gc频率,请参考:

结合上图,可以看出自程序运行以来,已经发生了7436个YGC和63个FGC,并且还有更多的GC。

基本上,它可以表明存在频繁的GC导致CPU使用率高的问题

第7步:使用命令转储存储器堆存储快照:jmap -dump:format = b,file = / tmp / my.hprof [java进程ID]

步骤8:使用内存分析工具(例如Eclipse Memory Analyzer)来分析my.hprof文件,并分析内存块占用了很多内存,并且存在内存泄漏,这使得空间无法被释放。

摘要:

有关过度使用CPU的调查需要两个角度。一个是它自己的任务线程中是否有错误,另一个是内存泄漏是否导致频繁的gc触发;另一个是内存泄漏是否导致频繁的gc触发。然后使用top,jstack,jmap等工具来定位问题的代码位置,然后针对性地进行分析和修改。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-367867-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...