Java性能利器-Jprofiler

1. JProfiler概览

    1. 使用简单
    1. 低开销,对应用影响小
    1. 支持对JDBC、JPA和NoSQL的数据库分析
    1. CPU,Thread,Memory分析功能尤其强大
    1. 支持多种IDE和应用服务器
    1. 支持多种模式离线和在线的分析
    1. 跨平台(Linux,Windows,Mac,Solaris,AIX,HP-UX)
  • 官网:https://www.ej-technologies.com/products/jprofiler/overview.html

2. Jprofiler采集流程和架构

采集流程
  • image.png
    1. JProfiler GUI中下达监控的指令
    1. JProfiler GUI 通过socket发送指令给被剖析jvm中的JProfile Agent
    1. JProfiler Agent收到指令后,将该指令转换成相关需要监听的事件或者指令,来注册到JVMTI上或者直接让JVMTI去执行某功能(例如dump jvm内存)
    1. JVMTI 根据注册的事件,来收集当前jvm的相关信息。 例如: 线程的生命周期和状态;对象实例的生命周期;堆内存的实时信息等等
    1. JProfiler Agent将采集好的信息保存到内存中,按照一定规则统计好,通过socket发送给JProfiler GUI
    1. JProfiler GUI Render 渲染成最终的展示效果

Jrofiler架构

  • image.png

3. 启动模式

Attach mode

对于剖析Java1.6或更高版本,JProfiler支持连接到一个正在运行的JVM并加载剖析代理。不过链接模式也有一些缺点,因为分析界面的一些功能在链接模式下无法使用,如下图,LiveMemory提示无法显示数组的分配情况。

image.png
Remote Attach mode
  • 1. 启动要分析的进程

启动命令中不需要设置任何和agentlib有关的参数

  • 2. 在远程主机运行jpenable

选择要分析的进程,模式和监听的端口号

3. 在本地启动jprofiler gui

Profile at startup

若要在启动时分析应用程序,在创建JVM前就必须激活剖析代理,将指定的JProfiler Agent手动加载到被剖析jvm。JProfiler GUI 将收集信息类型和策略等配置信息通过socket发送给JProfiler Agent,收到这些信息后该jvm才会启动。在被分析的jvm 的启动参数增加下面内容:语法: -agentpath:[path to jprofiler library]

java -agentpath:/home/linux-x64/libjprofilerti.so=port=8849 -jar /home/frank/test.jar|

Prepare for profiling:

和Profile at startup的主要区别:被分析的jvm不需要收到JProfiler GUI 的相关配置信息就可以启动, 只需要加一个nowait启动参数即可

Offline profiling

  1. 一般用于适用于不能直接调试线上的场景。Offline profiling需要将信息采集内容和触发策略打包成一个配置文件config.xml,在线上启动该jvm 加载 JProfiler Agent时,加载该xml。那么JProfiler Agent会根据Trigger的类型会生成不同的信息。例如: heap dump; thread dump; method call record等

  2. 语法

|

-agentpath:/home/2080/jprofiler8/bin/linux-x64/libjprofilerti.so=offline,id=151,config=/home/2080/config.xml

|

  1. 下面是使用了离线模式,并使用了每隔一秒dump heap 的Trigger:

· [[图片上传失败...(image-d433d4-1543051624595)]](javascript:;)

4. 数据采集方式

JProfiler采集方式分为两种:Sampling和Instrumentation

Sampling

类似于样本统计, 每隔一定时间(5ms)将每个线程栈中方法栈中的信息统计出来。优点是对应用影响小,缺点是一些数据/特性不能提供(例如:方法的调用次数)

Instrumentation

在class加载之前,JProfier把相关功能代码写入到需要分析的class中,对正在运行的jvm有一定影响。优点: 功能强大,但如果需要分析的class多,那么对应用影响较大,一般配合Filter一起使用。所以一般JRE class和framework的class是在Filter中通常会过滤掉。

5. JProfiler核心概念

Filter

什么class需要被分析。分为包含和不包含两种类型的Filter。

Profiling Settings

收据收集的策略:Sampling和 Instrumentation,一些数据采集细节可以自定义.

Triggers

一般用于offline模式,告知JProfiler Agent 什么时候触发什么行为来收集指定信息.

Live memory:

class/class instance的相关信息。 例如对象的个数,大小,对象创建的方法执行栈,对象创建的热点。

Heap walker

对一定时间内收集的内存对像信息进行静态分析,功能强大且使用。包含对象的outgoing reference, incoming reference, biggest object等

CPU views

CPU消耗的分布及时间(cpu时间或者运行时间); 方法的执行图; 方法的执行统计(最大,最小,平均运行时间等)

Thread

当前jvm所有线程的运行状态,线程持有锁的状态,可dump线程

Monitors & locks

所有线程持有锁的情况以及锁的信息

Telemetries:

包含heap, thread, gc, class等的趋势图(遥测视图)

6. 实践

内存泄露

  • Live memory->All Objects,显示当前进程的对象的类型、数量和占用内存大小
  • Live memory->Recored Objects,开始记录新生成的对象
  • Heap warlker,跟踪生成对象的调用栈
  • 根据调用栈找到生成对象的位置,即可分析到内存泄露的原因

CPU利用率高

  • 调用树
  • 热点区域图,显示当前进程不同方法调用占用CPU的比率,点击CPU占用率最高的方法,展开的调用树可以定位到哪行代码最消耗CPU资源

7. 和其他工具的对比

常用Java分析图形工具有Jprofiler、Jconsole、VisualVm和YourKit,还有jdk自带命令行工具jstack、jmap和jstat等等,命令行工具只能分析进程在某一个时间点的状态,相当于拍了一张照片,对于像死锁,CPU占用率100%的问题,比较好处理,命令行工具的优势是分析线上环境,而图形界面工具能够分析进程在一段时间内的状态,相当于拍了一段视频,图形界面的优势在于快速直观的分析问题,更多的情况,我们结合命令行工具和图形界面工具处理问题。与其他图形界面工具的对比如下:

IDE Integration

Jprofiler和YourKit支持与常用的集成开发工具集成,VisualVM需要通过插件的方式要集成开发工具集成

Memory + Memory Leak Analysis

都支持内存分析,Jprofler和youkit都能显示对象的个数,占用大小,以及生成对象的调用关系

CPU Profiling

都支持热点区域分析,而jprofiler能够通知指定时间段方法的执行次数

Database Statement Monitoring

Jprofiler和yourkit支持jdbc statement的分析,而VisualVM和jconsole不支持这种功能

Remote profiling

VisualVM是通过JMX采集远程应用的信息,jprofiler和Yourkit是通过远程代理加socket方式采集远程应用的信息

Summary

Jprofiler支持更多的功能,使用也方便

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容