如何使用JProfiler进行应用性能分析

前因:本人目前从事云计算后端应用开发,一次大批量创建虚拟机,发现随着机器量越来越多,我负责的java应用处理同一个方法越来越慢,通过日志输出时间,高的长达30分钟,我去,还不疯掉。。。于是一开始借助java本身的Jconsole进行监控,但是效果不直观,不能追踪我想要监控的方法执行哪个步骤导致处理慢,于是硬着头皮直接用JProfiler进行分析,这个工具熟悉了使用真的很不多,废话不多说,接下来具体说说如何使用以及注意事项。

步骤:因为我是windows开发,应用部署在linux上,所以我做的是本地监控远程linux服务器上的java应用,进行监控。
1、首先windows本地需要安装一个JProfiler客户端,下载链接:https://www.ej-technologies.com/download/jprofiler/files,图如下:
大家各自按照自己系统版本进行选择,我本地是64位的。没钱就选择先试用体验下,哈哈。。。
在这里插入图片描述
下载好后按照提示进行安装即可,没啥复杂度,就不截图演示。

2、由于需要监控的是linux上的应用,所以需要安装它的服务端,图如下:

在这里插入图片描述
这里选择linux上的TAR.GZ进行下载,下载后,需要上传到linux上,并进行解压,上传目录随意定。以下是我解压后的截图:
在这里插入图片描述
3、如何启动服务端
首先进入到上图的bin目录下,即: cd 你解压开来的文件夹/bin, 找到jpenable这个程序
然后执行 ./jpenable, 这时候会出现让你选择分析模型,我们输入1选择界面模型,
然后会提示输入一个分析端口,注意这个端口就是我们接下来要本地windows进行远程连接的端口号,我们照着输入一遍即可,图如下:
在这里插入图片描述
到此,我们的服务端已经启动好了,还等什么呢,接下里打开客户端,进行连接吧

4、客户端如何远程连接服务端
首先打开客户端程序,第一次打开如下:
在这里插入图片描述
点击图示的按钮,会出现图如下,我们按照图示步骤执行即可:
第1步我们选择Quick Attach 快速连接
第2步选择连接另一台电脑,即我们上面所说的linux电脑,当然也可以选择第一个按钮,监控本地电脑运行的应用
第3步我们下拉框选择直接连接
第4步我们需要输入我们要监控应用所在的服务器地址
第5步我们输入我们在上面第3点安装服务端时, 输入的端口号
第6步我们点击start按钮,即可开始监控了
在这里插入图片描述

5、开始分析
连接上打开如图:
在这里插入图片描述
可以看到左边树形菜单还是有很多内容项的,别怕,我们看几个主要的性能指标:cpu、memory、threads、GC Activity、Databases

5.1 cpu性能分析
我们点击左边的CPU Load, 打开如图:
在这里插入图片描述
从趋势图看,我们的cpu负载一直没有超过20%,最高峰的有两个参数,绿色的代表进行占用的负载为17.7%,系统占用的为18.45%,两者相差不大,可以说明目前我们的应用cpu负载没问题.

5.2 memory性能分析
我们点击左边的Memory, 打开如图:

在这里插入图片描述
我们可以看到蓝色和蓝色高度相差很多,看数字表明,绿色是空闲的大小,蓝色是已使用的大小,一半蓝和一半绿代表已经提交的内存大小,我们可以得出,如果绿色和蓝色相差高度越多,说明内存性能很好,反之,内存使用率较高,这时候我们需要看下我们应用所在的机器物理内存是否需要增加内存以及看下我们是否设置了应用启动时候分配过初始内存或者最大内存限制,比如我的内存就根据实际物理内存做了分配大小限制,如:java -Xms1024m -Xmx4000m -jar xxxx.jar,至于参数以及如何设置,不在这里讨论,可以看看java参数优化文章,这里提供一个仅做参考:https://blog.csdn.net/u013068377/article/details/78613645

5.3 threads性能分析
我们点击左边的Threads, 打开如图:

在这里插入图片描述
我们从白框中可以得知,当前线程状况,一目了然,我们可以判断出,当前是否因为线程很忙还是线程不够,导致程序变慢等因素产生。

5.4 GC Activity性能分析
我们点击左边的GC Activity, 打开如图:

在这里插入图片描述
我们可以看出,系统应用执行GC的情况,有时候因为频繁执行GC会导致应用暂停,如果是这样,我们需要看下堆栈信息,是否因为设置的堆太小,导致GC发现空间不够,频繁执行回收内存了

5.5 Databases性能分析
我们点击左边的Databases, 打开如图:

在这里插入图片描述
因为我的是jdbc,如果你是其他数据库连接,点击Databases下面相应数据库即可。由图可知我们当前应用连接的所有数据库连接信息

5.5.1数据库连接数量性能分析
我们点击Connections,查看当前的连接数,如图:

在这里插入图片描述
由图可知,我们看出当前一个数据库是6个连接,一个是20个数据库连接,这里需要注意下,如果我们有大批量并发,那么这么点连接数是不够的,一旦数据库获取不到连接,就会处于等待,这样就会导致应用执行变慢,所以这时候我们应该查看下,我们应用设置的数据库连接池大小,一般看三个参数设置,min.idle(最小空闲等待数)、max.idle(最大空闲等待数)、max.active(最大连接数),因为我们知道,数据库连接资源很宝贵,频繁的创建销毁是需要消耗性能的,这里的大小数我们需要根据我们的应用并发量进行响应设置,如果我们的应用并发量在100,那么我们的max.idle和max.active就不能设置太小,一般设置150就可以了,设置小了,就会导致批量创建会耗时,因为等待获取数据库连接。

5.5.2 数据库执行语句性能分析
我们点击Hot Spots,查看当前应用执行sql语句的频率以及耗时情况,如图:

在这里插入图片描述
由图我们可以看出,sql执行耗时情况一目了然,Time:总耗时时间,Average Time:平均耗时,Events:执行总数
通过对此进行分析,我们可以知道我们的程序对数据库执行情况,通过对慢语句发分析,一我们可以优化语句,二针对业务进行相应优化调整等等

好了,本次先说这么多,因为此工具真的很强大,有太多东西,下次再分享,如果哪里有不妥之处,欢迎不吝指教。
写此内容一记录下自己的历程,方便以后回顾,二分享出来希望帮到有此问题需要分析的同学,谢谢!

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值