性能-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频率
图片.png
频率越低越好,一般几天一次,如果Full GC频率很高,则要检查是否有问题。
举例,如图所示,该服务大概7h进行一次Full GC,需进一步定位;
且每次回收后,老年代有1G内容未被回收,说明有内存泄漏。(内存泄漏,指本该被回收的对象不能被回收而停留在堆内存中)
-
怎么定位??(敲黑板)
参考文档: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:缓存内存数;