性能-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:缓存内存数;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载blog.csdn.net/ning109314/article/details/10411495/ JVM工...
    forever_smile阅读 10,739评论 1 56
  • Java 虚拟机有自己完善的硬件架构, 如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 屏蔽了与具体操作系...
    尹小凯阅读 5,604评论 0 10
  • 一 、java虚拟机底层结构详解 我们知道,一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、...
    葡萄喃喃呓语阅读 5,379评论 0 4
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,858评论 3 83
  • 作者:一字马胡 转载标志 【2017-11-12】 更新日志 日期更新内容备注 2017-11-12新建文章初版 ...
    beneke阅读 6,618评论 0 7