本版版主招募中

 
标题: jvm performance tunning
juechen70
LU幼天使
Rank: 2
绝尘子



UID 12692
精华 0
积分 44
帖子 87
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 20
注册 2004-2-23
 
发表于 2004-4-28 15:09  资料  个人空间  主页 短消息  加为好友  添加 juechen70 为MSN好友 通过MSN和 juechen70 交谈
1.1 LOW PAUSE Collector

1.1.1 Parallel Copying Collector





Figure 1 - Single Threaded & Parallel Collection

1:1的关系。

1.1.2 Concurrent Collector




Figure 2 - Concurrent Collection


1.2 Throughput Collectors

1.2.1 Parallel Scavenge Collector



Figure 3 - Parallel Collection

12G-80G heap.

8CPU +

1.2.2 Mark-Compact Collector

the default old generation collector

Figure 4 - Mark-Compact Collection
2、JDK 1.4.1 堆模型


2.1 Young Generation Heap

三代:

young generation:Eden, and Semi-spaces.

old generation

permanent generation.



Figure 5 - 堆模型

  young generation各部分计算:

 Eden = NewSize - ((NewSize / ( SurvivorRatio + 2)) * 2)


 Semi-spaces=From space=To space=NewSize / ( SurvivorRatio + 2)

   NewSize是young generation的总大小

  SurvivorRatio:整数,1到更高。通过如下的参数进行定义:

  -XX:NewSize
  -XX:MaxNewSize
  -XX:SurvivorRatio

例:

  java -Xms512m -Xmx512m -XX:NewSize=128m -XX:MaxNewSize=128m \
  -XX:SurvivorRatio=2 application

2.2 Old Generation Heap

  老化堆,通过-Xms参数控制:Old Generation=Xms-young generation

例:

  java -Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m \
  -XX:SurvivorRatio=2 application

  young generation:256 MB
  old generation:256 MB.

2.3 Permanent Generation Heap

  存储类对象和相关的元数据:

  缺省值为:4 MB,通过-XX:PermSize和-XX:MaxPermSize两个选项控制

例:

  java -Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m \
  -XX:SurvivorRatio=2 -XX:PermSize=64m -XX:MaxPermSize=64m application

缺省情况:

  young Generation:2M Eden,64K semi-space

  older generation heap:5MB,最大44MB

  permanent generation:4MB.

使用-Xms和-Xmx参数只能调整old generation

  例:

  java -Xms128m -Xmx512m application

3、使用:XX参数来使用新的New Low Pause或Throughput Collectors

3.1 使用Low Pause Collectors

  对于young generation, 可以使用-XX:+UseParNewGC来启用parallel copying collector,对于older generations可以使用-XX:+ UseConcMarkSweepGC来启用concurrent collector

  例:

  java -server -Xms512m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=64m \
  -XX:SurvivorRatio=2 -XX:+ UseConcMarkSweepGC \
  -XX:+UseParNewGC application

注意:

1、young generation缺省使用copying collector

2、在单位CPU机器上,使用了-XX+UseParNewGC,缺省的copy collector还是只有一个。但可以控制并行度

3.1.1 控制并行度

  使用如下选项控制并行度:

   -XX:ParallelGCThreads=并行度

  缺省值为CPU的数量

例:

  java -server -Xms512m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=64m \
  -XX:SurvivorRatio=2 -XX:+UseParNewGC -XX:ParallelGCThreads=4 \
  -XX:+UseConcMarkSweepGC application

3.1.2 在JDK1.4.1下模拟"promoteall"

  "promoteall" 是jdk1.2.2的一个机制,将所有的对象都放到old grenration.使用如下的选项可以在1.4.1中模拟该机制:

  -XX:MaxTenuringThreshold=0 -XX:SurvivorRatio=20000



3.1.3 控制Concurrent collection 的启动

  concurrent collector做为后台线程,在old generation使用率达到一定程度时启动,缺省值为68%,可以使用如下参数进行控制:

  -XX:CMSInitiatingOccupancyFraction=百分比



3.2 使用Throughput Collectors

  对于young generation,使用-XX:UseParallelGC来启用arallel scavenge collector, older generation缺省情况下就使用mark-compact collector

  32位环境:

  java -server -Xms3072m -Xmx3072m -XX:NewSize=2560m \
  -XX:MaxNewSize=2560m XX:SurvivorRatio=2 \
  -XX:+UseParallelGC application

  64位环境:

  java -server -d64 -Xms8192m -Xmx8192m -XX:NewSize=7168m \
  -XX:MaxNewSize=7168m XX:SurvivorRatio=2 \
  -XX:+UseParallelGC application

  注意:

3.2.1 控制并行度

  使用如下参数控制并行度:

  -XX:ParallelGCThreads=希望的并行度

  缺省情况下为CPU数量

3.2.2 Adaptive Sizing for Performance

  Parallel scavenge collector可以使用如下参数自动分配young generation的相关参数-XX:+UseAdaptiveSizePolicy.例:

  java -server -Xms3072m -XX:+UseParallelGC \
  -XX:+UseAdaptiveSizePolicy application





4 jdk 1.4通过如下选项生成详细的GC信息

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC

-Xloggc:filename将gc的log放到一个单独的文件中。



5、使用 GC Analyzer Usage

使用方法:
gc_analyze.pl [-d] <gclogfile> <CPS> <active_call_duration> <CPUs> <application_run_time_in_ms>

参数名 意义
-d 输出详细的分析与总结
gclogfile gc log文件
CPS 缺省50
active_call_duration 缺省为32000ms
CPUs CPU数量,1个
applcation_run_Time_in_ms 运行时间

6 jdk1.4.1 Garbage Collector选项

Heap Layout

选项 缺省值 最大值 描述
-XX:NewSize 2Mb < 100 GB young generation初始值
-XX:MaxNewSize < 100 GB young generation最大值
-XX:SurvivorRatio WIN:8

SOL:64
<100000 控制eden space大小
-Xms 5 MB < 100 GB 缺省堆大小
-Xmx 4 MB < 100 GB 最大堆大小
-Xmn young generation的大小
-XX:MaxTenuringThreshold 31 Maximum number of times object is aged. Set this to 0 to enable promoteall.
-XX:PermSize 4 MB < 10 GB permanent generation初始值
-XX:MaxPermSize 64 MB < 10 GB permanent generation最大值
-XX:NewRatio server:2

client:8
young generation 与old generation的比例
-XX:PretenureSizeThreshold 0 大于这个尺寸的对象直接分配在older generation
-XX:+UseISM 使用ISM
-XX:+UseMPSS 使用multiple page sizes
-XX:+UseTLAB True on Solaris 使用本地线程对象分配
-XX:+AggressiveHeap Use for throughput applications with lots of CPUs and memory > 256MB. Turns on various flags, uses parallel scavenge collector for young generation, turns on Adaptive
SizePolicy, increase sizes of TLAB and other data structures
-XX:TargetSurvivorRatio 50 100 Desired percentage of survivor space used after a scavenge



 附件: 您所在的用户组无法下载或查看附件




__________________
绝顶、孤松
清风、明月
美酒、佳人
__________________
绝尘子就是我啦!
顶部
 



当前时区 GMT+8, 现在时间是 2008-11-23 19:02
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.078392 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver