问题背景

通过自己的项目,简单介绍一下Jprofiler分析内存和线程的基本使用
注意事项:

JVM调优工具Jprofiler无介绍快速安装(附安装包)(一)



JVM主要需要分析的情况

1 Jprofiler的live memory中频繁创建的Java对象:可能是死循环、循环次数太多,递归未终止
2 Jprofiler的live memory中存在大对象:bytes[]应该边读边写,长时间不写导致bytes数组过大
3 Jprofiler的live memory中产生内存泄漏:内存泄漏的时候开启Recorded Objects分析

4 Jprofiler观察web容器的线程最大数:Tomcat的线程容量应该大于最大并发数
5 Jprofiler观察线程阻塞
6 Jprofiler观察线程死锁
7 Jprofiler查看慢sql

Telemetries

1 简要视图

视图中可以看见:

  • Memory内存占用情况,蓝色为已使用的内存,绿色为剩余空闲的内存
  • GC Activity指的是垃圾回收器的活跃度,尖峰是Full GC,一般的是Young GC
  • Classes类的总数,蓝色是先有的总数,绿色是可以继续创建的数量
  • Threads线程数,黄色指的是正在等待的线程数量,蓝色指的是网络IO正在运行的行程数,绿色是正在运行的线程数
  • CPU Load使用率视图,蓝色线指的是系统的CPU使用率,绿色线指的是当前程序的使用率

Memory视图

1 可以看到内存的增长和衰减形成了参差不齐形状,每次峰值拐点处,说明进行了一次GC垃圾回收
2 如果蓝色平均值是不断上升的情况,说明可能存在内存泄漏的情况

在这里插入图片描述
这两个在内存泄漏的时候,再打开查看,否则会造成性能损耗

GC Activity视图

1 可以选择GC类型进行查看
2 这里也是可以进行优化的,如果Full GC的次数频率过高,会影响程序整体的性能,因此我们可以通过

  • 去调节垃圾回收器的款式
  • 新生代与老年代的比例
  • 新生代到老年代的年龄
  • 触发Young GC的条件和Full GC的条件

Classes类数量视图

1 查看看类是否无故持续升高,可能出现内存泄漏

Threads线程数视图

1 直观可以看到等待线程很多,这样其实比较消耗资源

  • 可以减少等待的线程数量
  • 如果一直为blocked thread红色占满,说明产生了死锁

CPU Load使用率视图

1 可以看到这个程序的使用率直接影响了系统CPU的使用率,成为了一个正比,而且浮动比较大,是值得优化的地方

All Objects视图

1 一般来说,如果有一个类的数量一直在增长,说明有内存泄漏的情况

2 可以通过右键进行查看计数排序

Allocation Call Tree内存分配调用树

1 点击Press,可以直观看到内存大概是什么类和方法使用了


2 点击OK
在这里插入图片描述
3 可以看到,我的程序的内存大部分在线程类里面使用了

4 查看内存热点分配,我都的事分配到了线程

Class Tracker类追踪视图

1 选择一个类进行追踪


还没写完,后续接着写




作为程序员第 139 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …

Lyric: 心里的眼泪

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐