heap内存下载到本地后,可以用MAT工具分析内存泄露,还有一些自带命令可以方便分析。
1)jmap:列出堆中的当前java对象
/opt/ibm/java/bin/jmap -histo xx > heap.log
2)jmap:导出heap
/opt/ibm/java/bin/jmap -dump:live,format=b,file=/home/temp/heap.log xx
3)jhat:java heap analyse tool,java堆的分析命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,
并支持对象查询语言
/opt/ibm/java/bin/jhat heap.log,启动命令堆内存不足时,指定堆大小 jhat -J-Xmx512m heap.log
查看分析后的html文档,http://localhost:7000
4)jstat:java statistics monitoring tool,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。
jstat [Options] vmid [interval] [count]
Options ,一般使用 -gcutil 查看gc情况 ;
vmid ,VM的进程号,即当前运行的java进程号;
interval: 间隔时间,单位为秒或者毫秒
count , 打印次数,如果缺省则打印无数次
4.1间隔1s查看gc情况
sudo -u admin /opt/ibm/java/bin/jstat -gcutil 4190 1s
S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 4.73 57.58 49.01 59.94 860 22.252 386 498.552 520.803 0.00 4.73 57.97 49.01 59.94 860 22.252 386 498.552 520.803 0.00 4.73 58.20 49.01 59.94 860 22.252 386 498.552 520.803 0.00 4.73 58.33 49.01 59.94 860 22.252 386 498.552 520.803 0.00 4.73 58.58 49.01 59.94 860 22.252 386 498.552 520.803 0.00 4.73 58.86 49.01 59.94 860 22.252 386 498.552 520.803 0.00 4.73 59.34 49.01 59.94 860 22.252 386 498.552 520.803 0.00 4.73 59.70 49.01 59.94 860 22.252 386 498.552 520.803 0.00 4.73 60.01 49.01 59.94 860 22.252 386 498.552 520.803
4.2异常gc,s0和s1完全无用,对象直接分配在eden区,导致young很快占满后马上full gc
S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 0.00 100.00 69.57 41.55 27 6.632 44 187.973 194.606 0.00 0.00 100.00 69.57 41.55 27 6.632 44 187.973 194.606 0.00 0.00 100.00 69.57 41.55 27 6.632 44 187.973 194.606 0.00 0.00 100.00 69.57 41.55 27 6.632 44 187.973 194.606 0.00 0.00 100.00 69.57 41.55 27 6.632 44 187.973 194.606 0.00 0.00 100.00 69.57 41.55 27 6.632 44 187.973 194.606 0.00 0.00 100.00 69.57 41.55 27 6.632 44 187.973 194.606 0.00 0.00 16.53 70.76 41.55 27 6.632 44 198.962 205.595 0.00 0.00 86.21 70.76 41.55 27 6.632 45 198.962 205.595 0.00 0.00 100.00 70.76 41.55 28 6.632 46 199.754 206.386minor gc太少了,很多临时对象没有被minor gc消灭掉,需要增大s0和s1,把参数-XX:SurvivorRatio=10改为-XX:SurvivorRatio=8,再重启后fullgc正常
8.30 0.00 43.32 77.38 52.67 115 9.467 4 8.228 17.694 8.30 0.00 52.69 77.38 52.67 115 9.467 4 8.228 17.694 8.30 0.00 58.75 77.38 52.67 115 9.467 4 8.228 17.694 8.30 0.00 63.94 77.38 52.68 115 9.467 4 8.228 17.694 8.30 0.00 69.63 77.38 52.68 115 9.467 4 8.228 17.694 8.30 0.00 73.61 77.38 52.68 115 9.467 4 8.228 17.694 8.30 0.00 80.52 77.38 52.68 115 9.467 4 8.228 17.694 8.30 0.00 85.72 77.38 52.68 115 9.467 4 8.228 17.694 8.30 0.00 92.19 77.38 52.68 115 9.467 4 8.228 17.694 8.30 0.00 97.30 77.38 52.68 115 9.467 4 8.228 17.694 0.00 7.11 6.25 77.42 52.68 116 9.485 4 8.228 17.713 0.00 7.11 10.95 77.42 52.68 116 9.485 4 8.228 17.713 0.00 7.11 16.00 77.42 52.68 116 9.485 4 8.228 17.713 0.00 7.11 20.17 77.42 52.68 116 9.485 4 8.228 17.713 0.00 7.11 27.25 77.42 52.68 116 9.485 4 8.228 17.713 0.00 7.11 32.05 77.42 52.68 116 9.485 4 8.228 17.713
4.3 经过调整后,还有1台机器有fullgc异常,如图
S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 0.00 40.67 76.86 44.57 49 7.997 188 468.193 476.190 0.00 0.00 40.71 76.86 44.57 49 7.997 188 468.193 476.190 0.00 0.00 40.77 76.86 44.57 49 7.997 189 468.514 476.511 0.00 0.00 40.83 76.86 44.57 49 7.997 189 468.514 476.511 0.00 0.00 40.85 76.86 44.57 49 7.997 190 468.514 476.511 0.00 0.00 40.88 76.86 44.57 49 7.997 190 468.812 476.809 0.00 0.00 41.02 76.86 44.57 49 7.997 190 468.812 476.809 0.00 0.00 41.08 76.86 44.57 49 7.997 190 468.812 476.809 0.00 0.00 41.11 76.86 44.57 49 7.997 190 468.812 476.809 0.00 0.00 41.17 76.86 44.57 49 7.997 190 468.812 476.809 0.00 0.00 41.20 76.86 44.57 49 7.997 191 469.142 477.138 0.00 0.00 41.25 76.86 44.57 49 7.997 192 469.447 477.444 0.00 0.00 41.38 76.86 44.58 49 7.997 192 469.447 477.444某牛人回复怀疑jvm自行触发了fullgc,把-XX:CMSInitiatingOccupancyFraction=80调整为-XX:+UseCMSInitiatingOccupancyOnly后gc正常了。
相关推荐
MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具,尤其适用于Mac OS X平台。这款工具可以帮助开发者诊断和解决Java应用中的内存泄漏问题,提高应用性能。MAT通过深入分析堆转储...
在“JAVA-笔记.pdf”中,你可能会学到如何理解和分析JVM内存配置,以及如何通过JConsole、VisualVM等工具监控和调优JVM。可能还会涉及JVM参数的设置,例如-Xms、-Xmx用于设定堆内存大小,-XX:NewRatio用于设置新生代...
#### 三、JVM 性能监控与分析工具 1. **VisualVM**:集成多种监控功能的可视化工具,可用于查看 CPU 使用率、内存使用情况等。 2. **JConsole**:标准的 Java 监控工具,提供了丰富的监控选项。 3. **MAT (Memory ...
同时,虽然可能没有完全实现垃圾回收,但理解垃圾回收的基本原理,如可达性分析和标记清除等,对于实现mini-jvm也是必要的。 总结 通过实现mini-jvm,开发者可以深入理解JVM的工作机制,这对于Java程序员来说是一...
2. **JDK自带工具**:如jconsole、jvisualvm用于监控JVM状态,jmap用于内存映射,jstack用于线程堆栈快照,jhat用于堆转储分析。 五、JVM与其他技术的交互 1. **JNI(Java Native Interface)**:允许Java代码调用...
10. **性能优化**:通过分析JVM的各种监控工具(如JConsole、VisualVM等),学习如何定位性能瓶颈并进行调优,包括堆大小调整、垃圾收集器选择、JVM参数设置等。 通过阅读这本书,开发者不仅能理解JVM的基本运作...
`show-busy-java-threads.sh` 脚本的原理是利用JVM提供的命令行工具,如`jstack`(Java堆栈跟踪),来获取当前JVM中线程的详细信息。`jstack`命令可以打印出Java应用程序的线程快照,包括每个线程的ID、状态、调用...
为了在激烈的Java开发者竞争中脱颖而出,深入理解Java基础知识、JVM(Java虚拟机)、线程并发以及常用框架是至关重要的。这份"java-java面试题库整理-基础-JVM-线程并发-框架等.zip"文件提供了一个全面的复习资源,...
网盘文件永久链接 目录 day1: 1 为什么要对jvm做优化 2 jvm的运行参数 3 jvm的内存模型 4 jmap的使用以及内存溢出分析 ...4 可视化GC日志分析工具 day3: 1 Tomcat8优化 2 JVM字节码 3 代码优化 .........
【标题】"weilei-JVM-ppt.rar"是一个压缩包文件,包含了关于JVM(Java虚拟机)的深入讲解。这个压缩包很可能是由个人精心整理并分享的,用于帮助学习者提升JAVA编程的高级知识,特别是关于JVM的部分。 【描述】提到...
Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。在这个压缩包中,"JVM图解.png"可能是对JVM内部结构的可视化表示,"JVM图解"可能是一个详细的文档,解释了JVM的工作原理,...
JVM调优工具是Java虚拟机(JVM)中的一组工具,用于优化和调试Java应用程序。这些工具可以帮助开发者和运维人员更好地了解JVM的运行情况,诊断和解决性能问题。 Jmap命令是JVM调优工具之一,用于查看内存信息。Jmap...
Java 11是Java开发工具集(JDK)的一个长期支持版本,自2018年9月发布以来,它提供了许多新特性和改进,旨在提高性能、安全性和稳定性。JVM(Java虚拟机)是Java平台的核心组件,负责运行Java程序。在Java 11中,对...
当我们谈论“gp-jvm-visualvm”时,我们是在讨论一个用于深入理解和分析JVM行为的工具集。这个压缩包文件包含了对JVM状态的详细视图,特别是关于堆栈溢出等关键问题的诊断工具,这对于开发者和性能调优专家来说是...
在《实战Java虚拟机——JVM故障诊断与性能优化》一书中,作者深入探讨了如何对JVM进行故障排查和性能调优,通过源码分析来帮助读者理解其内部工作原理。下面我们将根据书中的主题,详细阐述相关的知识点。 1. **JVM...
6. **源码和工具**:了解JVM的源码有助于开发者更深入地理解其工作原理,同时,工具如JVisualVM、JConsole和JProfiler等可以帮助开发者监控和分析JVM的运行状态,包括内存使用、线程状态、CPU负载等,以优化应用程序...
Error Prone是一款由Google开发的静态代码分析工具,它能够检测并防止常见的编程错误。Error Prone作为javac的插件,能够在编译时直接发现潜在的问题,而不仅仅是依赖于运行时的异常。例如,它可以检查空指针、未...
3. **性能监控**:`jstat`用于监控JVM的运行时统计信息,`jmap`获取堆内存详细信息或生成堆转储文件,`jhat`分析堆转储文件,`jconsole`和`jvisualvm`提供图形界面进行性能监控和诊断。 4. **JVM诊断**:`jinfo`...
jvisualvm是另一个功能强大的Java应用性能分析工具,集成了多种JDK工具的功能,如jconsole、jstack、jmap等,提供了一个统一的可视化界面。 了解并熟练运用这些JVM工具,可以帮助开发者和运维人员更好地理解Tomcat...
`show-busy-java-threads.sh`脚本通过JVM提供的命令行工具`jstack`来获取当前Java进程的线程堆栈信息,从而揭示这些繁忙线程的详细状态。 `jstack`是Java标准工具包(JDK)的一部分,它能输出Java虚拟机(JVM)中...