性能-JVM监控

JVM:

java virtual machine java虚拟机
1、JVM具有完整的硬件系统,如处理器,堆栈,寄存器等,还有相应的指令系统
2、JVM的主要工作是解释直接的指令集,并映射到本地的cpu指令集合os系统调用

JVM构成图如下:


图片.png

堆的构成图如下:


图片.png

堆主要存放java中的实体

性能测试中主要关注点:

  • JVM的内存,
  • 线程,
  • CPU

为什么要进行GC

  • JVM减少系统垃圾,提交系统性能

JVM内存-GC(Garbage Collection)

  • JVM GC回收哪个区域的垃圾?
    需要注意的是,JVM GC只回收堆区和方法区内的对象。而栈区的数据,在超出作用域后会被JVM自动释放掉,所以其不在JVM GC的管理范围内。

  • Full GC?
    Full GC 是清理整个堆空间—包括年轻代和永久代。

  • Full GC触发的条件?
    参考链接:https://blog.csdn.net/qq_38384440/article/details/81710887
    1、System.gc()的调用
    2、老年代空间不足;
    3、永生区空间不足(JDK8.0以上已无永生区);
    4、CMS,GC机制(??)
    5、HandlePromotionFailure(??)
    6、分配很大的对象

  • Full GC频率
    频率越低越好,一般几天一次,如果Full GC频率很高,则要检查是否有问题。
    举例,如图所示,该服务大概7h进行一次Full GC,需进一步定位;
    且每次回收后,老年代有1G内容未被回收,说明有内存泄漏。(内存泄漏,指本该被回收的对象不能被回收而停留在堆内存中

    图片.png

  • 怎么定位??(敲黑板)
    参考文档:https://www.cnblogs.com/wuchanming/p/7766994.html
    1、可以根据进程和线程分析
    2、使用dump分析内存
    2-1、 用工具生成java应用程序的heap dump(如jmap)
    2-2、 使用Java heap分析工具(如MAT),找出内存占用超出预期的嫌疑对象
    2-3、 根据情况,分析嫌疑对象和其他对象的引用关系。
    2-4、 分析程序的源代码,找出嫌疑对象数量过多的原因。
    3、分析CPU利用率是否稳定(top命令)
    4、查看物理内存是否够用 (free命令)
    total:内存总数;
    used:已经使用的内存数;
    free:空闲的内存数;
    shared:当前已经废弃不用;
    buffers Buffer:缓存内存数;
    cached Page:缓存内存数;

你可能感兴趣的:(性能-JVM监控)