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),无奈如果希望全盘看懂那些汇编代码还是有些够呛,毕竟自己那些汇编知识毕业后都还回去了,也没有系统的拾起来过。

时间: 2024-09-07 10:37:38

JVM调优文献参考的相关文章

JVM调优总结(十)-调优方法

JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 JProfiler:商业软件,需要付费.功能强大.详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似.推荐. 如何调优 观察内存释放情况.集合类检查.对象树 上面这些调优工具都提供了强大的功能,但是总的来说一般分为以下几类功能 堆信息查看 可查看堆空间大小分配(年轻代

JVM调优

在了解JVM调优之前,我们先了解下java的内存管理:http://blog.csdn.net/cymm_liu/article/details/7759696 基于Java的应用最大的问题莫过于出现Out Of Memory Error(内存溢出错误),通常出现OOME问题的应用都会有以下一些表现: l         Jvm crash l         性能奇差 l         Jvm似乎在不断的进行垃圾回收收集,这通常致使程序停止运行甚至服务崩溃   而且一旦出现这种情况,一般都需

jvm系列(七):jvm调优-工具篇

16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题,长长可以到达事半功倍的效果来. jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,

JVM调优浅谈

[本文转载自JVM调优浅谈] 1.数据类型     java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值."引用值"代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置.     基本类型包括:byte.short.int.long.char.float.double.boolean.returnAddress     引用类型包括:类类型.接口类型和数组 2.堆与栈  

JVM调优的几种策略(转)

    JVM参数调优是一个很头痛的问题,可能和应用有关系,别人说可以的对自己不一定管用.下面是本人一些JVM调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,dell2950服务器.        JVM调优        一:JVM调优之串行垃圾回收        也就是默认配置,完成10万request用时153秒.JVM参数配置如下:        $JAVA_ARGS.="-Dresin.home=$SERVER_ROO

《Java程序性能优化》学习笔记 JVM调优

第五章 JVM调优5.1 Java虚拟机内存模型 1.JVM虚拟机将其内存数据分为程序计数器.虚拟机栈,本地方法栈,Java堆,和方法去等部分. 2.Java虚拟机栈,在Java 虚拟机规范中,定义了两种异常与占空间相关,即StackOverError和OutOfMemoryError.如果线程在计算过程中,请求的栈深度大于最大可用的栈深度,则抛出SOE,如果Java栈可以动态扩展,而在扩展栈的过程中,没有足够的内存空间来支持栈的扩展,则抛出OutOfMemoryError. 栈的大小直接决定了

jvm 调优-JVM调优问题,请大神指教

问题描述 JVM调优问题,请大神指教 JVM调优是针对 jdk调优 还是 容器 像tomcat调优 具体怎么手动修改jvm的队内存,栈内存,新生代,老年代和持久带,具体在配置 比如说我安装了一个jdk6的环境变量也配置好了,具体怎么弄

基于JVM 调优的技巧总结分析_java

这篇是技巧性的文章,如果要找关于GC或者调整内纯的文章,看我其他几篇文章.因为是JVM 调优总结,所以废话少说.从各方面一共收集到以下几个方法:1.升级 JVM 版本.如果能使用64-bit,使用64-bit JVM.    基本上没什么好解释的,很简单将JVM升级到最新的版本.如果你还是使用JDK1.4甚至是更早的JVM,那你首先要做的就是升级.因为JVM从1.4- >1.5->1.6可不是仅仅的版本号升级,或者仅仅往里面加了一堆新的语言特性,这么简单.而是真正在JVM做了重大的改进,每次版

jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)

文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在出现问题的时候在终端输入一些命令来解决.所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命令的使用也让我们更能了解jvm构成和特性