JVM调优文献参考

简介:        俗话说的好,净信书不如无书。怀揣着怀疑,翻阅了诸多权威文献。这里总结了自己工作、学习中做性能调优时经常翻阅的文献,希望能为大家带来方便。如果在阅读过程中有什么不清楚的,也欢迎大家留言,一同探讨

       俗话说的好,净信书不如无书。怀揣着怀疑,翻阅了诸多权威文献。这里总结了自己工作、学习中做性能调优时经常翻阅的文献,希望能为大家带来方便。如果在阅读过程中有什么不清楚的,也欢迎大家留言,一同探讨。

(1) http://www.oracle.com/technetwork/java/javase/tech/exactoptions-jsp-141536.html

我们都知道,JVM spec,早期sun的实现叫hot spot。这篇文章主要列举了一些与EVM对应的参数及其详解

(2) http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

着重关注一下下面的说明:

The options are loosely grouped into three categories.
Behavioral options change the basic behavior of the VM.
Performance tuning options are knobs which can be used to tune VM performance.
Debugging options generally enable tracing, printing, or output of VM information.

(3) http://www.oracle.com/technetwork/java/javase/trouble-138361.html

这个链接主要是关于Troubleshooting Java™ SE的,调优方面主要关注目录中加粗部分,如下:

Contents of This Page
Troubleshooting Guides 
Quick Tips! 
Troubleshooting Tools 

Pertinent Articles 
Pertinent Blogs 
Pertinent Forum Sites 

(4) http://www.ibm.com/developerworks/cn/java/j-nativememory-linux/#resources

主要讲解了windows,linux平台上JVM内存分配的内在原理

(5) http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=/com.ibm.java.doc.igaa/_1vg00011e17d8ea-1163a087e6c-7ffe_1001.html

如何debug OOM问题

(6) https://www.securecoding.cert.org/confluence/display/java/The+CERT+Oracle+Secure+Coding+Standard+for+Java

如何写出高质量代码

(7) http://www.azulsystems.com/resources/presentations#springone2011

主要阐述了JVM一些特性(自java2以来),如方法内联(You can either make a method look attractive to the VM to inline or manually inline a method if it doesn't break your object model.),streamlined locks,adaptive optimization,improved Garbage Collection,Fast Thread Synchronization,Just-In-Time Compilers

(8) http://blogs.oracle.com/jonthecollector/entry/our_collectors

2008年的文章,讲解了sun的垃圾收集器代码框架,还不错~

(9) http://www.bookonlinepdf.com/troubleshooting-and-diagnostic-guide-for-java-2-platform-standard-edition-5-0.pdf

最近在看,不错的官方资料

(10) http://www.javaworld.com/javaworld/javatips/jw-javatip92.html

(11) http://www.ibm.com/developerworks/forums/forum.jspa?forumID=843

(12) http://www.ibm.com/developerworks/java/library/j-codetoheap/index.html

(13) http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html

(14 )http://java.sun.com/performance/reference/whitepapers/tuning.html

(15) http://www.ibm.com/developerworks/java/library/j-codetoheap/index.html

(16) http://www.oracle.com/technetwork/java/tuning-139912.html

(17) http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5

Java 对象存储结构,非常实用,关注cache perf.的同学可以借此了解如何让java对象的排兵布阵符合cache line

(18) http://apacheignite.gridgain.org/docs/jvm-and-system-tuning

这个也是我在小组里面建立的调优参考规格

(19) https://engineering.linkedin.com/performance/optimizing-linux-memory-management-low-latency-high-throughput-databases 

server spike  problems because of many page scan and low memory usage

(20) http://jprante.github.io/lessons/2012/07/26/Mmap-with-Lucene.html

(21)https://community.oracle.com/thread/3786750?start=0&tstart=0

两篇跟offheap 的hugepage相关的文章

进程映射

下面是一些常见OOM问题

1. java.lang.OutOfMemoryError: Java heap space 

2. java.lang.OutOfMemoryError: PermGen space 

3. java.lang.OutOfMemoryError: unable to create new native thread

4. java.lang.StackOverflowError 5. out of memory in Native Code (C-heap)!


贴几个case:

1.

[Full GC[PSYoungGen: 279700K->267300K(358400K)][ParOldGen: 685165K->685165K(685170K)]964865K->964865K(1043570K)  
[PSPermGen: 32390K->32390K(65536K)],0.2499342 secs]  
[Times: user=0.08 sys=0.00, real=0.05 secs]  
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space


2.


[Full GC[PSYoungGen: 0K->0K(141632K)][ParOldGen: 132538K->132538K(350208K)]32538K->32538K(491840K)  
[PSPermGen: 65536K->65536K(65536K)],0.2430136 secs]  
[Times: user=0.37 sys=0.00, real=0.24 secs]  
java.lang.OutOfMemoryError: PermGen space


3.  CMS垃圾收集机制下,工业基准参数(根据业务调整)
Xmx6g -Xms6g -Xmn256m
-XX:PermSize=128m -XX:MaxPermSize=256m
-Xss256k
-XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseFastAccessorMethods
-XX:+CMSPermGenSweepingEnabled
-XX:+HeapDumpOnOutOfMemoryError
-XX:+PrintCommandLineFlags



注意:UseParNewGC(ParNew+Serial Old),该选项实际上被后面的并发标记GC(ParNew + CMS +Serial Old)选项覆盖掉了~有些参数,尤其是带radio或Threshold的,比方说MaxTenuringThreshold,InitialTenuringThreshold,InitialSurvivorRatio,MinSurvivorRatio, SurvivorRatio,MaxHeapFreeRatio,MinHeapFreeRatio,NewRatio,我们需要针对具体应用调优,记住,调优是件很伽利略的事情~


后记:在NIO使用场景比较多的情况下,-XX:+DisableExplicitGC可能会有副作用。如果担心System.gc()调用造成fullGC频繁,可以尝试XX:+ExplicitGCInvokesConcurrent参数。在Full gc的时候会对old gen做reference processing,进而能触发基于PhantomReference的清理对象Cleaner对已死的DirectByteBuffer对象做清理工作。


最近在研究JIT运行期性能优化,发现了JITWatch这个不错的工具,记录一下(关于JITWatch的更详细的功能,可以参看这里的视频)。本来呢,通过hsdis插件获得HotSpot执行时产生的汇编代码也是一种不错的选择(如早期,我就喜欢这样玩,java -server -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+DebugNonSafepoints DemoVolotile > demo.assembly),无奈如果希望全盘看懂那些汇编代码还是有些够呛,毕竟自己那些汇编知识毕业后都还回去了,也没有系统的拾起来过。

目录
相关文章
|
12月前
|
监控 Java 编译器
Java虚拟机调优指南####
本文深入探讨了Java虚拟机(JVM)调优的精髓,从内存管理、垃圾回收到性能监控等多个维度出发,为开发者提供了一系列实用的调优策略。通过优化配置与参数调整,旨在帮助读者提升Java应用的运行效率和稳定性,确保其在高并发、大数据量场景下依然能够保持高效运作。 ####
287 58
|
11月前
|
监控 架构师 Java
Java虚拟机调优的艺术:从入门到精通####
本文作为一篇深入浅出的技术指南,旨在为Java开发者揭示JVM调优的神秘面纱,通过剖析其背后的原理、分享实战经验与最佳实践,引领读者踏上从调优新手到高手的进阶之路。不同于传统的摘要概述,本文将以一场虚拟的对话形式,模拟一位经验丰富的架构师向初学者传授JVM调优的心法,激发学习兴趣,同时概括性地介绍文章将探讨的核心议题——性能监控、垃圾回收优化、内存管理及常见问题解决策略。 ####
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
399 1
|
监控 Java 编译器
Java虚拟机调优实战指南####
本文深入探讨了Java虚拟机(JVM)的调优策略,旨在帮助开发者和系统管理员通过具体、实用的技巧提升Java应用的性能与稳定性。不同于传统摘要的概括性描述,本文摘要将直接列出五大核心调优要点,为读者提供快速预览: 1. **初始堆内存设置**:合理配置-Xms和-Xmx参数,避免频繁的内存分配与回收。 2. **垃圾收集器选择**:根据应用特性选择合适的GC策略,如G1 GC、ZGC等。 3. **线程优化**:调整线程栈大小及并发线程数,平衡资源利用率与响应速度。 4. **JIT编译器优化**:利用-XX:CompileThreshold等参数优化即时编译性能。 5. **监控与诊断工
|
存储 监控 Java
JVM进阶调优系列(8)如何手把手,逐行教她看懂GC日志?| IT男的专属浪漫
本文介绍了如何通过JVM参数打印GC日志,并通过示例代码展示了频繁YGC和FGC的场景。文章首先讲解了常见的GC日志参数,如`-XX:+PrintGCDetails`、`-XX:+PrintGCDateStamps`等,然后通过具体的JVM参数和代码示例,模拟了不同内存分配情况下的GC行为。最后,详细解析了GC日志的内容,帮助读者理解GC的执行过程和GC处理机制。
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
监控 架构师 Java
JVM进阶调优系列(6)一文详解JVM参数与大厂实战调优模板推荐
本文详述了JVM参数的分类及使用方法,包括标准参数、非标准参数和不稳定参数的定义及其应用场景。特别介绍了JVM调优中的关键参数,如堆内存、垃圾回收器和GC日志等配置,并提供了大厂生产环境中常用的调优模板,帮助开发者优化Java应用程序的性能。
JVM进阶调优系列(5)CMS回收器通俗演义一文讲透FullGC
本文介绍了JVM中CMS垃圾回收器对Full GC的优化,包括Stop the world的影响、Full GC触发条件、GC过程的四个阶段(初始标记、并发标记、重新标记、并发清理)及并发清理期间的Concurrent mode failure处理,并简述了GC roots的概念及其在GC中的作用。