前言
首先看官网介绍:
JProfiler is an award-winning all-in-one Java profiler. JProfiler's intuitive UI helps you find performance bottlenecks, pin down memory leaks and resolve threading issues.
翻译过来就是:
JProfiler是一个屡获殊荣的多功能Java分析器。JProfiler直观的UI可以帮助您找到性能瓶颈,确定内存泄漏并解决线程问题。
更多的信息可到官网查看,本文只介绍在特定情况下如何接入JProfiler进行程序分析。
官网: 不允许有网址,自行搜索吧
首次试用期过后,可续可尝试申请试用期使用:不允许有网址,自行搜索吧
一、安装
下载地址:不允许有网址,自行搜索吧
选择自己的平台类型下载,按提示安装就好。
二、使用方式
以下是本人在不同情形下的使用方式,仅作参考,具体使用最好还是查阅官网。
1、本地JVM分析
如果是分析本地运行的java程序,直接打开JProfiler,如下选择“Attach 到一个正在运行的JVM”。
这时会列出本地运行的所有的JVM,选择连接到要分析的JVM上。
之后选择采用方式,按需选择,一般分析选择第三项就可以了,对原程序的性能影响较低。
然后就可以进行分析了。
2、集成到IntelliJ IDEA插件
如果你使用的开发工具是IntelliJ IDEA,可在idea的【文件/设置/插件】中搜索“JProfiler”,进行插件安装,当然前提是本地已经安装了JProfiler。
安装后可以直接在idea内使用profile图标(一般在右上方)启动项目进行分析,之后步骤与第1节同。
3、分析远程服务器上正在运行中的JVM
可以参考下面的链接(感谢前辈们的经验传授),本人按步骤验证过,可在不重启JVM的情况下进行分析,不过分析完之后要剥离嵌入的agent需要重启程序,当然不剥离也行,只有稍微的性能损耗。
不允许有网址,自行搜索吧
4、java启动参数中加入agent的方式
以公司内部翼集平台为背景:
(1)在翼集编辑流水线,构建镜像的环节中,自定义文件处上传agent代理,下图红框1:
JProfier的agent代理在连接向导中会有有下载链接,也可在此处下载(注意版本一致):
不允许有网址,自行搜索吧
(2)dockerfiler里面增加java启动参数设置
上图红框2和红框3,摘要如下:
FROM xx.xxx.xx.xx:xxxx/library/jdk-17.0.9:v17
ADD jprofiler_agent_linux-x86_14_0_2.tar.gz /usr/local/
EXPOSE 8849
ADD xxxxxxxxx.jar /usr/local/
EXPOSE 8080
CMD ["java", "-agentpath:/usr/local/jprofiler14/bin/linux-x64/libjprofilerti.so=port=8849,nowait","-Dspring.profiles.active=dev", "-XX:+PrintGCDetails" ,"-jar", "-Xms500m", "-Xmx3550m" ,"/usr/local/xxxxxxxx.jar"]
(3)在执行发布的时候对8849端口做映射
映射端口到容器外部可访问端口。
(4)之后就可以在本地启动JProfiler,在第二步选择中,选择 【新会话/新远程集成】,按向导设置即可连接到远程jvm。
可能需要填写的一些信息:端口和上述映射的一致;远程代理程序安装位置: /usr/local/jprofiler14
几个示意图:
这里提供了agent的下载地址。
之后就可以使用里面的分析能力,功能很多,需要自己去慢慢摸索了。
5、使用JProfiler分析k8s上的java程序
附上一个链接,没实际操作过,仅作引导,需自行探索。
不允许有网址,自行搜索吧