JVM调优之选择步骤

1. 选择JVM运行模式

  a. Client模式:启动快,占用内存少,JIT编译器生成代码的速度也更快。

  b. Server模式:提供了更复杂的生成代码优化功能,这个功能对服务器应用而言尤其重要。大多数Server模式的JIT的编译优化都要消耗额外的时间以收集更多的应用程序行为信息,为应用程序运行生成更优的代码。

  c. Tiered Server模式:结合Client和Server运行模式的长处,即快速启动和高效的生成码。  -server -xx:+Tieredcompilation命令。可取代Client运行时。

2. 选择32位/46位的JVM

3. 垃圾回收器

  a. Serial收集器    b. Throughtput 收集器  c. Mostly-Concurrent收集器  d. G1收集器

  影响垃圾收集性能的三个属性:吞吐量、延迟、内存占用。其中任何一个属性的提高几乎都是以另一个或两个属性性能的损失作为代价的。

  JVM垃圾收集调优的三个原则:

    a. 每次MinorGC都尽可能多地收集垃圾对象。->减少Full GC的频率(Minor GC 最大化原则)

    b. 处理吞吐量和延迟问题时,垃圾处理器能使用的内存越大,即Java堆内存越大,垃圾收集的效果越好,应用程序运行也越流畅。

    c. 在三个性能属性(吞吐量、延迟、内存占用)中任意选择两个进行JVM垃圾收集器调优。我们称之为“GC调优的3选2原则”。

4. 命令行选项及GC日志

5. 确定内存占用

  活跃数据大小:应用程序稳定运行时长期存活对象所占用的Java堆内存量。PS:应用程序运行于稳定态时,FullGC之后Java堆占用的空间大小。

  a. 解决 out of mermory Errors

    对于老年代引起的out of mermory Errors,增加-Xms和-Xmx值

    对于永久代引起的out of mermory Errors,增加-xx:permsize和-xx:MaxPermSize

  b. 计算活跃数据大小

    应用程序运行于稳定态时,老年代占用Java堆大小;应用程序运行于稳定态时,永久代占用Java堆大小。

    (如果不经常发生FullGC,可以人工触发)

  c. 设置堆内存法则:

    法则一:将Java堆的初始值-Xms和最大值-Xmx设置为年老代活跃数据大小的3~4倍

    法则二:永久代的初始值-xx:PermSize及最大值-xx:MaxPermSize应该比永久代活跃数据大1~1.5倍

    法则三:新生代空间应该为老年代空间活跃数据的1~1.5倍,老年代应该设置为活跃数据大小的2~3倍

空间 命令行选项 占用倍数
Java堆 -Xms和-Xmx 3~4倍FullGC后的老年代空间占用量
永久代 -xx:PermSize和-xx:MaxPermSize 1.2~1.5倍FullGC后的永久代空间占用量
新生代 -Xmn 1~1.5倍FullGC后的老年代空间占用量
老年代 Java堆大小减新生代大小 2~3倍FullGC后的老年代空间占用量

  

如果调优无法满足,则需回顾或者修改应用程序的内存需求,调整应用程序,减少对象分配或者更重要的,减少对象保持可以减少活跃数据的大小。

时间: 2024-07-29 00:09:31

JVM调优之选择步骤的相关文章

jvm调优的基本步骤

1.jps 查看应用进程2.jinfo -flags pid 查看曾经赋值的一些参数3.jstat 查看类装载信息jstat -class PID 1000 10 查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次查看垃圾收集信息jstat -gc PID 1000 104.jstack查看线程堆栈信息jstack PID 5.jmap 生成堆快照jmap -heap PIDdump出堆内存相关信息jmap -dump:format=b,file=heap.hprof PID

JVM调优经验分享

前言 一.JVM调优知识背景简介 二.JVM调优参数简介 三.JVM调优目标 四.JVM调优经验 结束语 <br/> 本次分享探讨的JVM调优是指server端运行的JVM调优,适应版本为[1.6– 1.7], 不涉及最新的1.8版本. 假设线程池.连接池.程序代码等都已经做过优化,效果(系统吞吐量.响应性能)仍然不理想,我们就可以考虑JVM调优了. <br/> 一. JVM调优知识背景简介 1.堆与栈的概念 堆和栈是程序运行的关键:栈是运行时的单位,而堆是存储的单位. 栈解决程序

jvm调优小结

不区分tomcat,resion等应用,主要是针对jvm调优 tomcat家目录下catalina.sh  catalina.bat 从http://unixboy.iteye.com/blog/174173 http://my.oschina.net/shootercn/blog/15393这个更详细 http://www.360doc.com/content/15/0429/15/7853380_466822446.shtml详细讲解-XX:ParallelGCThreads 学到了很多东西

JVM调优知识

一.Java应用服务器 Tomcat.Nginx.Resin.等多种应用服务器,虽然JVM做为容器,提供的是一个Java Web的运行时环境,以支持Servlet/JSP等等这些内容的运行但是我们都很清楚,其本质上是还是一个Java应用程序.现在有哪些java应用服务器呢?商业的有BEA Weblogic Server.IBM Websphere Application Server.Oracle Application Server.Sybase EAServer.免费开源的java应用服务器

JVM调优[转]

JVM调优总结-序 几年前写过一篇关于JVM调优的文章,前段时间拿出来看了看,又添加了一些东西.突然发现,基础真的很重要.学习的过程是一个由表及里,再由里及表的过程.呵呵,所谓的"温故而知新".而真正能走完这个轮回的人,也就能称为大牛或专家了.这个过程可能来来回回,这就是所谓"螺旋上升",而每一次轮回都有新的发现. 这回添加的东西主要集中在基础的一些问题上,还有一些这两年思考的问题.这些问题可能平时我们不会刻意去想,但是真正看清楚了,却发现还是大有裨益的:)希望对大

JVM调优(二)经验参数设置

调优设置具体解析 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作系统对内存无限制. 在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m. 典型设置: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k  -Xms3550m:设置JVM最大可用堆内存为355

JVM调优

转自:http://blog.csdn.net/chen77716/article/details/5695893 一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小. 年轻代(N

Tomcat的JVM调优实战

一些调优点在上篇日志中已写到,在此不做说明 直接使用Jmeter进行调优测试吞吐量Code package cn; import java.io.IOException; import java.util.Map; import java.util.WeakHashMap; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Htt

JVM调优及参数设置

(1)参数 -Xms:初始堆大小 -Xmx :最大堆大小 此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存 -Xmn :年轻代大小 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8. -XX:NewSize:设置年轻代大小 -XX:MaxNewSize:年轻代最大值 -XX:NewRatio 年老代与年轻代的比值 -XX:SurvivorRat