一、JProfiler简单介绍
JProfiler是由ej-technologies GmbH公司开发的一款性能瓶颈分析工具(该公司还开发部署工具)。
其特点:
1、使用方便,界面操作友好
2、对被分析的应用影响小
3、CPU,Thread,Memory分析功能尤其强大,支持对jdbc,noSql, jsp, servlet, socket等进行分析
4、支持多种模式(离线,在线)的分析
5、跨平台
二、工具准备
下载地址:https://www.ej-technologies.com/download/jprofiler/version_100
1、客户端(windows)
2、服务端(linux)
下载完成之后,点击安装包bin目录下的执行文件
启动之后的界面
菜单分析:
1.实时监测 Telemetries
- 整体视图 Overview
显示堆内存、cpu、线程以及GC等活动视图;
- 内存 Memory
显示一张关于内存变化的活动时间表。
- 记录吞吐量 Record Throughput
- 显示一张关于完成的交易数的活动时间表。
- **记录的对象 Recorded objects **
显示一张关于活动对象与数组的图表的活动时间表。
- **垃圾回收 Garbage collector **
显示一张关于垃圾回收活动的活动时间表。
- **类 Classes **
显示一个与已装载类的图表的活动时间表。
- **线程 Threads **
显示一个与动态线程图表的活动时间表。
2.内存剖析 Live Memory
JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。
- **所有对象 **
显示类或在状况统计和尺码信息堆上所有对象的包。你可以标记当前值并显示差异值。
- **记录对象 Record objects **
显示类或所有已记录对象的包。你可以标记出当前值并且显示差异值。
- **分配访问树 Allocation call tree **
显示一棵请求树或者方法、类、包或对已选择类有带注释的分配信息的J2EE组件。
- **分配热点 Allocation hot spots **
显示一个列表,包括方法、类、包或分配已选类的J2EE组件。你可以标注当前值并且显示差异值。对于每个热点都可以显示它的跟踪记录树。
- 类追踪 Class Tracker
显示类、包或分配已选类的J2EE组件。你可以标注当前值并且显示差异值。对于每个对象都可以显示它的跟踪记录树。
**2.堆遍历 Heap walker **
在JProfiler的堆遍历器(Heap walker)中,你可以对堆的状况进行快照并且可以通过选择步骤下寻找感兴趣的对象。堆遍历器有五个视图:
- **类 Classes **
显示所有类和它们的实例。
- **分配 Allocations **
为所有记录对象显示分配树和分配热点。
- **索引 References **
为单个对象和“显示到垃圾回收根目录的路径”提供索引图的显示功能。还能提供合并输入视图和输出视图的功能。
- **数据 Data **
为单个对象显示实例和类数据。
- **时间 Time **
显示一个对已记录对象的解决时间的柱状图。
3. CPU 剖析 CPU View
JProfiler 提供不同的方法来记录访问树以优化性能和细节。线程或者线程组以及线程状况可以被所有的视图选择。所有的视图都可以聚集到方法、类、包或J2EE组件等不同层上。CPU视图部分包括:
- **访问树 Call tree **
显示一个积累的自顶向下的树,树中包含所有在JVM中已记录的访问队列。JDBC,JMS和JNDI服务请求都被注释在请求树中。请求树可以根据Servlet和JSP对URL的不同需要进行拆分。
- **热点 Hot spots **
显示消耗时间最多的方法的列表。对每个热点都能够显示回溯树。该热点可以按照方法请求,JDBC,JMS和JNDI服务请求以及按照URL请求来进行计算。
- **访问图 Call graph **
显示一个从已选方法、类、包或J2EE组件开始的访问队列的图。
- 方法统计 Method Statistics
- 复杂分析 Complexity Analysis
- 访问追踪 Call Tracer
**4. 线程剖析 Thread profiler **
对线程剖析,JProfiler提供以下视图:
- **线程历史 Thread history **
显示一个与线程活动和线程状态在一起的活动时间表。
- **线程监控 Thread monitor **
显示一个列表,包括所有的活动线程以及它们目前的活动状况。
5. 监控和锁 Monitors & Locks
观察JVM的内部线程并查看状态:
- **死锁探测图表 Deadlock Detection **
显示一个包含了所有在JVM里的死锁图表。
- **目前使用的监测器 Current monitor useage **
显示目前使用的监测器并且包括它们的关联线程。
- **历史检测记录 History usage history **
显示重大的等待事件和阻塞事件的历史记录。
- **监测使用状态 Monitor usage statistics **
显示分组监测,线程和监测类的统计监测数据。
6.数据库监测 Databases
三、实施操作
1、客户端(这里主要是针对远程服务器的配置设置)
首先,点击Session—>Intergration Wizards(集成向导)—>New Remote Integration(新建远程集成)
然后选择远程机器后点击下一步:
下一步之后选择响应的服务器JVM版本:
选择应用方式,作为客户端进行连接:
选择连接服务器的方式后并配置连接参数:
配置完之后点击下一步并直接点击ok,再点击下一步:
下一步出现就是需要完成服务器配置文件的读取,也就是需要配置远程服务器的服务端的配置路径:
下面需要配置客户端与服务端连接的通讯端口,如果是要多个应用,可以修改不同的端口号,比如8850,8851等等,不要有其他进程占用冲突即可:
这一步需要确认配置信息,并且记住主要几个要点,第一,需要将本地配置产生的jprofiler配置文件config.xml拷贝到服务器上的/opt/jprofiler10.0.4/conf/目录下,第二,将启动参数加入到远程服务器的启动参数配置中去:
第10步直接点击完成即可。稍后在连接会话中进行打开。
2、服务端(主要分为Tomcat和纯Java应用的配置)
先将下载下来的linux版本的JProfiler,jprofiler_linux_10_0_4.tar.gz,上传到远程服务器,放置在/opt/下,
然后解压
tar -zxvf jprofiler_linux_10_0_4.tar.gz,在/opt/下生成jprofiler10.0.4的文件夹
cd /opt/jprofiler10.0.4
上面客户端配置的时候说的有两个要点,现在本地打开config.xml文件,修改里面的key,刚下载并注册的JProfiler,可以通过官网申请到临时的使用注册码,网上找了很多都没有用,就不要浪费这个时间了。
1、点击https://www.ej-technologies.com/download/jprofiler/trial
这样就可以申请一个临时的注册码进行使用,然后在自己的软件上进行更正:
完了之后修改config.xml中第三行的key值:
完成之后将文件上传到服务器的
/opt/jprofiler10.0.4/conf/
然后找到应用的启动项,加入启动参数。添加的方式有很多种,只要加上下面这个配置既可以了:
1
2 1$CATALINA_OPTS="$JAVA_OPTS -agentpath:/opt/jprofiler10.0.4/bin/linux-x64/libjprofilerti.so=port=8849,nowait"
2
最后配置环境变量并使之生效:
vi /etc/profiles
添加下面参数:
source /etc/profiles
这样就可以启动应用了,使用命令查看启动参数是否添加上:
ps -ef | grep java
1
2
3
4
5
6
7
8
9
10
11 1[query@pmsapp1 bin]$ ps -ef | grep java
2/opt/app/tools/jdk1.7.0_80/bin/java -cp.:/opt/app/tools/jdk1.7.0_80/lib/dt.jar:/opt/app/tools/jdk1.7.0_80/lib/tools.jar:
3/opt/app/work/pms-online/conf:/opt/app/work/pms-online/apps/jcbank-pms-online-boot-0.0.1-SNAPSHOT/*:/opt/app/work/pms-online/lib/*
4-agentpath:/opt/jprofiler10.0.4/bin/linux-x64/libjprofilerti.so=port=8850,nowait
5-server -Duser.home=/opt/app -Dapp.home=/opt/app
6-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true
7-Djava.net.preferIPv4Addresses=true -Dfile.encoding=UTF-8
8-Dserver.id=pms-online -Dathena.config=/opt/app/work/pms-online/conf/athena.properties -Dathena.config.decrypt=
9-Dspring.profiles.active=test -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false
10-Dcom.sun.management.jmxremote.authenticate=false -Dlog.active=less
11
最后再使用客户端进行监控连接:
问题检查:
1、安装过程后启动连接,会突然失去连接,这个时候需要查看应用的启动日志,比如tomcat的话,就在catalina.out中查看具体jprofiler>>>的错误日志;
2、如果出现无效的注册码,还是上面说的去申请临时的注册码;