问题背景
上个篇章介绍了使用Jprofiler工具查看IDEA本地进程内存占用情况和GC情况,这个篇章介绍连接远程的进程,其中有两种连接方式,因为有一种我始终没有效果,所以换了一种,但两种我都分两个篇章写出来,大家选择自己合适的就行
注意事项:
- 远程连接需要保持Jprofiler的windows客户端和Jprofiler的linux服务端版本保持一致,这样连接才不会出问题
- 上传同版本的安装包可以自己下载
- 也可以去官网下载
JVM调优工具Jprofiler无介绍快速安装(附安装包)(一)
JVM主要需要分析的情况
<font size=4>1 Jprofiler的live memory中频繁创建的Java对象:可能是死循环、循环次数太多,递归未终止</font>
<font size=4>2 Jprofiler的live memory中存在大对象:bytes[]应该边读边写,长时间不写导致bytes数组过大</font>
<font size=4>3 Jprofiler的live memory中产生内存泄漏:内存泄漏的时候开启Recorded Objects分析</font>
<font size=4>4 Jprofiler观察web容器的线程最大数:Tomcat的线程容量应该大于最大并发数</font>
<font size=4>5 Jprofiler观察线程阻塞</font>
<font size=4>6 Jprofiler观察线程死锁</font>
Linux安装Jprofiler服务端
1 下载linux安装包
2 自己创建文件夹,使用xshell指令导入Jprofiler的linux安装包jprofiler_linux_11_1_4.tar.gz
mkdir jprofiler
rz -y
3 解压jprofiler_linux_11_1_4.tar.gz
tar -zxvf jprofiler_linux_11_1_4.tar.gz
4 进入jprofiler11.1.4文件夹的bin目录
pwd
/home/app/jprofilter/jprofiler11.1.4/bin
5 启动jprofiler,在这个bin文件夹下,执行jpenable
./jpenable
6 选择你需要分析的进程
7 Enter确定,选择模式,我选择的1为GUI模式,在线分析
8 输入一个未被占用的端口号
9 此时我需要分析的进程的日志打印了Jprofilter的启动日志
JProfiler> Protocol version 63
JProfiler> Java 8 detected.
JProfiler> 64-bit library
JProfiler> Listening on port: 8849.
JProfiler> Attach mode initialized
JProfiler> Enabling native methods instrumentation.
JProfiler> Can retransform classes.
JProfiler> Can retransform any class.
JProfiler> Retransforming 16 base class files.
JProfiler> Base classes instrumented.
JProfiler> Native library initialized
10 查看8849端口是否被监听
netstat -nltp | grep 8849
11 使用Windows的Jprofiler进行连接,新建session
12 设置端口号和IP,进行连接,但需要保证windows和服务器网络连接是相通的,关闭防火墙
13 选择推荐模式,全抽样
14 日志打印,每5ms进行一次抽样,这样不影响项目工程的性能
JProfiler> Using sampling (5 ms)
JProfiler> Time measurement: elapsed time
JProfiler> CPU profiling enabled
JProfiler> Initializing configuration.
JProfiler> Retransforming 129 class files.
JProfiler> Configuration updated.
15 看到GUI界面,可以进行分析了
总结
- 这个方式我是有效的,还有另一种方式,下个篇章介绍,但我没有效果
作为程序员第 135 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha ...