Tomcat的JVM优化设置综述

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GC的开销—全部时间中用于GC的比例。
GC的频率—通过跟应用程序的执行比较来得到GC的执行 频率。
支持GC运行所需使用的内存大小—例如heap的大小。
GC的及时性(Promptness)—一个对象从被废弃到内存 被回收之间的时间差
2020/10/18
6
LOGO
分代介绍
2020/10/18
7
放入年老代
2020/10/18
12
LOGO
内存回收算法
2020/10/18
13
串行收集器
LOGO
只使用一个cpu,并且回收时,应用程序会暂停 -XX:+UseSerialGC
2020/10/18
14
并行收集器
LOGO
-XX:+UseParallelGC -XX:+UseParallelOldGC( JDK6.0支持对年老代并行收集) -XX:ParallelGCThreads=<N> -XX:MaxGCPauseMillis=<N> -XX:GCTimeRatio=<N>
由于新生代的空间通常都比较小而且可能存在大量 不再被引用的对象,所以针对新生代的GC执行频率 高、速度快。
10
Old(Tenured),年老代
LOGO
Old(Tenured),年老代。年轻代的对象如果能够挺 过数次收集,就会进入年老代。年老代使用标记整 理算法。因为年老代的对象都没那么容易死的,采 用复制算法就要反复的复制对象,很不合算,只好 采用标记清理算法,但标记清理算法其实也不轻松, 每次都要遍历区域内所有对象
Perm(permanent ),永生代。例如类和方法对
象以及它们的描述对象。
11
分代回收过程
LOGO
• 单击此处添加文本 • 单击此处添加文本 • 单击此处添加文本
Eden到Survior
整理
• 单击此处添加文本 • 单击此处添加文本 • 单击此处添加文本
• 单击此处添加文本 • 单击此处添加文本 • 单击此处添加文本
2020/10/18
16
吞吐量优先
LOGO
–Xmx1280m –Xms1280m –Xmn480m –Xss256k –XX:PermSize=64m –XX:MaxPermSize=128m
– XX:+UseParallelGC –XX:+UseParallelOldGC –XX:ParallelGCThreads=8 –XX:MaxGCPauseMillis=100
2020/10/18
9
YOUNG
LOGO
Young(Nursery),年轻代。研究表明大部分对象都 是朝生暮死,随生随灭的。因此所有收集器都为年 轻代选择了复制算法。 Young里面又分为3个区域,一个Eden,所有新 建对象都会存在于该区,两个Survivor区,用来实 施复制算法。每次复制就是将Eden和第一块 Survior的活对象复制到第2块,然后清空Eden与第 一块Survior。
2020/10/18
15
并发收集器
LOGO
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=60 -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
LOGO
Tomcat的JVM优化设置
2020/10/18
1
目录
1 2 3 4 5
• GC介绍 • 分代介绍 • 内存回收算法 • 测试结果 • 结论
2020/10/18
LOGO
2
LOGO
GC介绍
2020/10/18
3
GC
LOGO
GC是一个自动管理内存的程序。主要职责是分配内存,保证 被引用的对象始终在内存,把不被应用的对象从内存中释放 GC会自动计算对象被引用的情况,只要对象不再被引用,相 应的内存就会被回收,另外,GC非常重要的一点就避免内存 碎片,道理跟windows的磁盘整理一样,把使用中各个内存 块整合起来,这样才能保证有足够的空间来存储大对象。
2020/10/18
17
短暂停优先
-Xmx1280m -Xms1280m -Xmn480m -Xss256k -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=8 -XX:CMSFullGCsBeforeCompaction=0 -XX:+UseCMSCompactAtFullCollection -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0
2020/10/18
4
GC类型
LOGO
Scavenge GC 一般情况下,当新对象生成,并且在Eden申请空间失败时,就好触发 Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的 对象移动到Survivor区。然后整理Survivor的两个区。
Full GC 对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:
Tenured被写满 Perm域被写满 System.gc()被显示调用 上一次GC之后Heap的各域分配策略动态变化
2020/10/18
5
GC的性能评判标准
LOGO
吞吐量(Throughput)—全部时间中不用于GC的比例。 (重点)
暂停时间—GC过程中应用程序执行暂停的时间。(重点)
ห้องสมุดไป่ตู้
分代( Generations )
LOGO
分代根据对象的生命周期长短,把堆分为3个代: Young(年轻代、新生代)
Old(年老代、老生代)
Permanent(永生代)
优点:根据不同代的特点采用不同的收集算法,扬长避短
2020/10/18
8
堆内存分布图
LOGO
-Xms1280m -Xmx1280m 堆大小 -XX:PermSize=128m -XX:MaxPermSize=128m 永生代大小 -Xss128K 单线程栈的大小 -XX:MaxTenuringThreshold=2 新生代对象经过2次进入老年代
相关文档
最新文档