一、Linux系统性能分析

可以通过vmstata、iostat、prstat、top等命令进行查看。
​​在这里插入图片描述

二、windows系统性能分析

可以通过typeperf等指令,当然也可以借助很多图化化的工具来进行分析。如下文介绍的jprofiler

typeperf -si 1 "\System\Processor Queue Length 显示CPU队列当前长度

在这里插入图片描述

三、JProfile工具分析

3.1安装

JProfile可以在window和Linux使用,其安装都非常方便,但需要注意的是被监控的应用要修改其启动的JAVA_OPTS参数,在Window中可以通过JProfile工具直接attach应用(或者借助IDE工具),会自动设置启动VM参数,例如:

-agentpath:D:\Program Files\jprofiler11\bin\windows-x64\jprofilerti.dll=port=34433 -Dfile.encoding=GBK

程序的执行窗口自动打印:

JProfiler> Protocol version 61
JProfiler> JVMTI version 1.1 detected.
JProfiler> Java 8 detected.
JProfiler> 64-bit library
JProfiler> Listening on port: 34433.
JProfiler> Enabling native methods instrumentation.
JProfiler> Can retransform classes.
JProfiler> Can retransform any class.
JProfiler> Native library initialized
JProfiler> VM initialized
JProfiler> Waiting for a connection from the JProfiler GUI ...
JProfiler> Using instrumentation
JProfiler> Time measurement: elapsed time
JProfiler> CPU profiling enabled

工作效果如图所示:
在这里插入图片描述

在Linux上的使用,需要拷内必要的库文件

cp /opt/openans-ncc-pce/jprofiler/libstdc++.so.6.0.19 /lib64/
chmod 755 /lib64/libstdc++.so.6.0.19
ln -s /lib64/libstdc++.so.6.0.19 /lib64/libstdc++.so.6

配置JAVA参数

-agentpath:/opt/openans-ncc-pce/jprofiler/bin/linux-x64/libjprofilerti.so=port=8849,nowait

目前应用部署多是采用Docker,需要记得将内部调试端口暴露,这样则可以方便通过IP和端口远程连接。

3.2内存分析

ps.本节的Jprofile版本为9.2.1
在这里插入图片描述
特别地针对OOM的问题定位,为了可以检查出是哪些对象无法被回收且不断增加,操作步骤:

  1. 执行Run GC先清理一遍内存
  2. 执行Mark Current Values,通过标记便于查看哪些对象在增加
  3. 执行Start Recordings开始内存记录,执行这步的主要目的是为下面Heap Walker设置一个监控区间,方便分析
  4. 开始跑可能出现OOM的业务流程,完成后再次执行Run GC,过滤出真正无法回收对象
  5. 执行Stop Recordings,停止内存记录
  6. 观察无法回收对象,切入Heap Walker进一步分析,如下图
    在这里插入图片描述
    HeapWarker 会分析内存中的所有对象,包括对象的引用、创建、大小和数量
  7. 最后通过该对象的引用分析最终在业务代码何处申请或创建,进而确定OOM位置

双击对象,弹出对话框中

  • incoming:表示显示这个对象被谁引用
  • outcoming:表示显示这个对象引用的其他对象
  • Allocations:表示对象是如何创建出来的(可以从创建方法开始检查,检查所有用到该对象的地方,直到找到泄漏位置)

在这里插入图片描述
简单举例本人工作中的分析:
在这里插入图片描述

3.3CPU分析

使用CPU views中的Call Tree可以监测到某个方法执行的全部耗时过程,用于分析性能热点
在这里插入图片描述

  • Call Tree 调用树:较为直观地看到方法执行调用栈
  • Hot Spots 热点
  • Call Graph 调用图
  • Method Statistics 方法统计:通过快照分析一段时间内相关方法执行统计情况
  • Complexity Analysis 复杂度分析
  • Call Tracer 调用跟踪

3.3DB分析

JDBC探针具有记录JDBC连接泄漏
通过执行业务接口,可以查看到对应的SQL语句和相关耗时
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐