你可能不知道的jprofiler使用小贴士

说明:本文的小贴士是针对jprofiler8的,其他版本上可能有不适用的地方

贴士一:使用jpenable监控,无需增加jvm参数和重启

  • jprofiler8服务端监控的时,有四种方式,主要为需要增加jvm参数和不需要增加jvm参数,离线模式和非离线模式,其中最简单的使用方式为:直接执行jprofiler8/bin/下面的jpenable,选择要监控的应用程序的pid,指定端口号

服务器执行如下:

qaperf@classb:~/perftest/jprofiler8/bin$ ./jpenable 
Connecting to org.apache.catalina.startup.Bootstrap start [14007] ...
Please select the profiling mode:
GUI mode (attach with JProfiler GUI) [1, Enter]
Offline mode (use config file to set profiling settings) [2]
1
Please enter a profiling port
[31757]
8849
You can now use the JProfiler GUI to connect on port 8849

四种方式对比

配置方式 优点 缺点
Attach模式 最方便的使用方式,不需要修改应用程序的任何内容,不需要重启,jprofiler6不支持这种方式 第一次连接上的时候需要重新retransform所有已经加载的class,会占用额外的堆内存空间
Agent模式 可以监控应用程序启动时的性能 需要修改应用的jvm参数,需要重启,需要先启动客户端,等待客户端连接上后,应用程序才会启动
nowait模式 不需要等待客户端连接,jvm参数增加后可以直接启动 需要修改jvm参数,需要重启
offline模式 离线模式 同样需要修改jvm参数,通过命令行指定何时监控以及监控数据的存储位置

贴士二:设置sampling或instrument采集模式

  • jprofiler客户端连接时,可以设置监控方式,其中在Method clall recording中有定制监控方法分为,instrumentation方式和sampling方式
    • instrumentation(注入)方式,是指在方法中注入字节码,记录监控信息,优点,结果更准确真实,监控的数据更多,包含调用次数等,缺点:性能开销大
    • sampling(采样)方式,是指,通过额外的线程,周期性的采集其他线程的执行信息,jprofiler8中默认的采集间隔为5ms(visualVM中默认的采样时间为100ms),优点:开销小;缺点:无法采集调用次数等信息,且对于执行时间短且调用频率高的接口存在采集遗漏的情况

贴士三:设置CPU Profiling的统计时间类型

  • Cpu Profiling,统计方法的执行时间有两种:
    • 一种:Elapsed time:(wall clock time),统计的是从方法进入到离开的时间,这种统计方式简单,开销小,但是统计出来的时间可能比真实的CPU时间长
    • 一种:Estimated CPU time:(CPU time)真正的CPU时间,开销大

贴士四:CPU监控之Call Tree层的监控点

  • 右键,通过view settings可以设置显示的数据内容,该图片上包含了总时间、inherent time(即该方法的执行时间减去节点的执行时间)、执行次数、对应的类和方法
  • 层级展开,同故宫百分比可以看到消耗CPU的比例,这个接口中,freemarker消耗CPU约为70%以上,为最消耗CPU的方法
  • 方法前面的图标,绿色的m表示method,如果通过上方的Aggregation level选择Class or Package,会对应变成紫色的C或者黄色的P;红色的箭头表示Servlets,圆球表示browser,即对应url;如果遇到其他的一些看不懂的图标可以参见jprofiler的help文档,非常的全面和细致

贴士五:CPU监控之hot spot的使用

  • 点击host spot 可以查看当前的热点方法,找到是哪些方法最消耗CPU
  • 其中Filter classes这儿有个设置,默认情况下是 show separately,是每个方法独立的时间统计,不包含调用关系,推荐使用Add to calling class,这个是包含所调用方法时间的统计,这个更能从业务上看到是因为什么导致的CPU消耗高
  • 点击+号展开热点方法,可以看到是哪些更上层的方法调用了它

 


贴士六:CPU监控之动态修改监控配置

  • Profiling setting
  • 监控过程中,可以通过点击session setting 实时调整监控配置
  • 设置好后,点击Apply now可以立刻应用到当前监控中

 


使用精华总结

  1. 推荐使用jpenable的形式链接远程服务
  2. 推荐不改变jprofiler的默认配置方式
  3. CPU监控使用hot spot时,推荐查看下Add to calling class的统计结果,方便理解
  4. visualVm也是通过sampling的方式进行CPU Profiling分析的,但是这种方式有个弊端:当存在某些接口执行时间较短且高频繁调用时,不易发现;而且采样存在遗漏,统计的结果分析不很清楚,需要使用instrument的方式进行补充验证。
更多jprofiler使用细节,请见 wiki页面

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者侯本文授权发布。