当前位置:   article > 正文

【jprofiler应用-oom原因定位】_idea jprofiler定位连接未释放

idea jprofiler定位连接未释放

1.安装jprofiler   jprofiler_windows-x64_11_0_2.exe

2.使用KeyGen.exe生成注册码然后输入

3.idea中安装jprofiler插件

File-->Setting-->Plugins 搜索jprofiler插件然后安装

 4.以一个内存溢出的程序为例子进行分析(一直分配内存,List容器引用着Student导致无法释放)

Student.java

  1. package com.mydog.noval.model;
  2. public class Student {
  3. private int age;
  4. public Student(int age) {
  5. this.age = age;
  6. }
  7. public int getAge() {
  8. return age;
  9. }
  10. public void setAge(int age) {
  11. this.age = age;
  12. }
  13. }

GameServer.java

  1. package com.mydog.noval;
  2. import com.mydog.noval.model.Student;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. public class GameServer {
  6. public static void main(String[] args) {
  7. List<Student> list = new ArrayList<>();
  8. int i = 0;
  9. while (true) {
  10. list.add(new Student(i++));
  11. }
  12. }
  13. }

5.通过jprofiler启动游戏服务器 // 可以看到在指定入口函数后,idea中jpofiler按钮是亮着的

第一次用,它会让你选择之前安装的桌面版jprofiler.exe,选择即可。

游戏服务器启动后会打印一些启动参数:

6.分析

1.先看下内存信息,分析GC是否正常 

结论:可以看出来内存一直在增长,正常情况下,因为有GC,应该是先分配内存,然后GC进行内存回收会有下降的趋势,也就是"波浪形"才正常: 先增加--》GC--》降低--》这样子循环。

现在看到,并不是,而是一直在增加,说明有内存泄露。

 2.看下到底是哪些对象在使用中

结论:既然怀疑有内存泄露,看下到底是哪些对象有泄露呢?可以看出全是1亿多个Student对象,那怀疑是Student对象没被GC掉。

 3.看下哪些方法占据时间最长

结论:看下系统运行中,到底哪些方法占比最长,可以看出来,main占据了100%,然后看到List的add和Student的初始化占据较长。因此可以轻松定位到哪个方法有问题。

7.保存快照 // 点击save  snapshot就可以保存下来快照,让别人一起分析

输入要保存的名字,这里随便输入1:

 

8.别人双击生成的1.jps就可以使用jprofiler重新载入文件,从而别人也一起分析问题。

总结:

可以看出来jprofiler功能很强大,基本上压测时,就可以使用这个工具,分析出热点代码和内存相关的数据从而定位问题。

jprofiler的功能还有很多,比如:锁之类的,之后有经验了,再进行补充吧!!!

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号