网站首页 > 精选教程 正文
性能测试过程中,一般优化过程,优先监控操作系统层面进行监控和分析,再从应用层面进行监控和调优分析,但是对于简单问题,也可以从应用层面进行分析;如下
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问题,分析步骤
- 根据OOM中日志信息,出现分析OOM原因
- 检查jvm参数,是否因为内存大小太小,或者其它参数不合理
- 打印内存dump文件,分析占用内存大和对象多的类和实例
- 对比不同时间内存,对比分析占用内存类和实例,并且通过GC日志持续关注内存变化情况,判断是否内存溢出和泄露问题。
猜你喜欢
- 2024-11-07 JMX带你透视Java应用,实现应用程序的动态实时监控
- 2024-11-07 巧用JAVA监控工具2——jvisualvm java jvm 监控
- 2024-11-07 老技术新谈,Java应用监控利器JMX(1)
- 2024-11-07 Javaagent 使用 - 探针 jsp探针
- 2024-11-07 详解docker容器的资源监控方案 docker容器资源限制
- 2024-11-07 性能诊断利器 JProfiler 快速入门和最佳实践
- 2024-11-07 java监控工具(1) java视频监控
- 2024-11-07 java通过插桩的概念来完成监控系统的设计
- 2024-11-07 高性能、无侵入的 Java 性能监控神器
- 2024-11-07 JAVA JVM常用监控工具 jvm常用的监控和调试工具
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)