java内存/cpu消耗过高分析一般步骤

一:top

根据top命令找到消耗cpu或者内存较高的进程,记下进程号码pid

二:top -H -p pid

top -H命令是查看该进程pid下面有多少个线程(tid)及哪些线程tid占用资源比较高

三:jstack pid(jstack查看线程情况)

使用jstack命令将当前的java进程的内存使用情况快照下来做分析(可以多几次jstack命令,因为是快照,所以变化会很快,可以结合几次的快照综合分析问题是在哪里);在jstack中线程的tid都是hex十六进制的,所以在二中tid需要先转化一下,使用printf ‘%x’ tid转化成十六进制(十六进制是用x,十进制d,八进制o,二进制b)

四:jstat --utilgc(jstat查看class  compile编译及gc垃圾回收的信息)

查看垃圾回收情况,查看是否会有比较多次的full gc情况,出现频繁的full gc会导致cpu过高及存在内存泄漏的问题,查看FGC的次数是否一直在变,以及进程从启动到现在full gc的次数

五:jmap pid(jmap查看内存分配详情)

根据jmap查看哪些类或者基本类型使用的内存比较多([符号表示这个是基本类型,如[B,表示是byte类型)

猜你喜欢

转载自blog.csdn.net/shyrainxy/article/details/108699430