JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

java应用监控和分析思路 java监控gc

wys521 2024-11-07 13:44:25 精选教程 28 ℃ 0 评论

性能测试过程中,一般优化过程,优先监控操作系统层面进行监控和分析,再从应用层面进行监控和调优分析,但是对于简单问题,也可以从应用层面进行分析;如下

java应用监控主要监控2个方面CPU和MEM,如下:

java应用调优思路

在调优和分析中:CPU,JVM,线程,连接,内存这5个方面,这5个方面相互关系和影响。调优过程有简单问题,可能只分析其中一个方面,就能分析出问题原因,但对于复杂问题,需要全面分析这5个方面。

常用监控工具和命令

模拟使用方便程序,排序如下:

(1) 使用JDK自带命令:jstack,jmap,jstat,jinfo,jcmd

(2) 使用JDK自带工具:jvisualvm,jconsole

(3) 使用免费分析工具:MAT,阿里arthas,GCview

(4) 使用商用工具:dynatrace,Jprofile等

常用使用JDK自带命令:

(1) jinfo -flags pid --查看pid的java应用的全部参数

(2) jmap -heap pid --查看pid的java应用的java堆详细信息

(3) Jmap -histo:live pid|more --显示pid的java应用的堆中存活对象的统计信息

(4) jmap -dump:live,format=b,file=heap.bin pid --将pid的应用存活的对象都转储到heap.bin

(5) jmap -dump:format=b,file=heap.bin pid --将pid的应用所有对象都转储到heap.bin

(6) jstack -l pid > xxxx.txt --将pid的应用线程堆栈信息保存到xxxx.txt文件中

(7) jstat -gcutil pid 1000 100 --查看pid的java应用GC信息,每1000ms执行一次,执行100次


CPU高问题分析思路

对于CPU高问题,分析哪些线程占用CPU高。

监控过程:

1) linux 系统中:top -H -p 进程号 或者 pidstat -t -p 进程号

2) 查看占用CPU的线程TID号

3) 将TID号,转16进程打印 ,printf “%x\n” tid号

4) 打印线程堆栈信息,分析占用cpu高线程处理堆栈信息,jstack -l 进程号 |grep XXXX -A 50

分析过程:

(1)分析线程中有明显占用CPU高线程情况。 如占用CPU高的线程是GC线程,说明可能在内存问题,需要检查内存参数,判断是否存在内存问题。此类问题比较容易定位和分析。

(2)对无明显有问题的线程,可以多打印几次线程堆栈信息,对比分析runnable线程大部分都在处理哪部分代码,是否有相同处; 并且重点分析相同处代码是否存在性能问题。

(3)使用其它工具进行分析定位。

1)使用JDK自带工具,jvisualvm监控CPU,进行分析。

2)使用arthas监控及打印CPU的火焰图

3)使用jprofile监控CPU分析


OOM问题分析思路

对于出现OOM问题,分析步骤

  1. 根据OOM中日志信息,出现分析OOM原因
  2. 检查jvm参数,是否因为内存大小太小,或者其它参数不合理
  3. 打印内存dump文件,分析占用内存大和对象多的类和实例
  4. 对比不同时间内存,对比分析占用内存类和实例,并且通过GC日志持续关注内存变化情况,判断是否内存溢出和泄露问题。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表