flyapple88
作者flyapple88·2012-09-04 16:29
软件开发工程师·奥盟

Jrockit 参数调优

字数 2872阅读 4720评论 1赞 1
1 basic tuning
1.1 调整垃圾回收:-Xgc:throughput 优化垃圾回收为应用吞吐量 -Xgc:pausetime 优化垃圾回收暂停时间 -Xgc:deterministic该参数将垃圾回收的暂停时间控制在十分短暂、预先定义的时间内。
1.2 调整Nursery Size:在Jrockit JVM中部分garbage collection策略模式使用nursery。Nursery是heap区中的一块用于分配新对象的区域,当nursery区满了的时候,他会在young collection中进行独立回收。young collection的频率、持续时间由nursery的大小决定。一个大的nursery size会降低回收的频率但每次young collection的持续时间会增加。如果使用-Xgc:throughput or -Xgc:genpar参数的话,nursery的大小会对应用的吞吐量进行自动调整优化。在保证较短的young collection同时,nursery的大小应尽可能大。根据应用的情况,一个nursery的大小范围可能由几MB到heap区大小的一半。如:java -Xms:800m -Xmx:1000m -Xgc:pausetime -Xns:100m
1.3 调整暂停目标:-XpauseTarget:time 设置停止时间
2 性能调整
2.1 大页面:-XX:+UseLargePagesFor[Heap|Code]
2.2 compaction:To assess the impact compaction has on garbage collection pauses, you can monitor the
-Xverbose:compaction or -Xverbose:gcpause outputs or create a recording
with the JRockit Flight Recorder and examine the garbage collection pauses in that
recording.
-XXcompaction:percentage=percentage If the compaction causes undesirably long garbage collections, tune the compaction ratio
-XXcompaction:maxReferences=value The -XXcompaction:maxReferences option has no effect
when the -Xgc:deterministic or -Xgc:pausetime options are used. For these garbage collection modes, do not tune the compaction manually; use the -XpauseTarget option to tune the garbage collection pauses
2.3 调整Thread Local Area Size
加大Thread Local Area 的大小对多线程的应用来说十分有益,每个线程里可以分配大量的对象。提高TLA的大小也有理由较大对象呗分配到TLA中。然而,过大的TLA会导致更多的内存碎片以及频率更高的垃圾回收。评估您的应用分配的对象的大小,创建一个JRockit Flight Recorder记录并观察对象分配数据。-XXtlaSize:min=size,preferred=size
2.4 调整Keep Area
-XXkeepAreaRatio:percentage
Keep Area的大小会影响old collection和young collection的频率,过大的keep area会引起young collection过于频繁,而太小的keep area会使old collection频繁。
keep area的大小定义为Nursery的百分比。比较理想的keep area大小应该尽可能的小并且维持在一个较小的promotion ratio。promotion ratio的值可以再Flight Recorder recordings、-Xverbose:memory=debug输出中,以及-Xverbose:gcreport中看到。例:java -XXkeepAreaRatio:10 --10%的Nursery大小
2.5 调整Concurrent Garbage Collection触发
-XXgcTrigger:value
当使用Concurrent策略进行垃圾回收时(mark、sweep)jrockit jvm会在垃圾回收的concurrent phase时期动态调整何时启动old generation garbage collection来避免running out of free heap space。触发是基于上一次collection后heap堆里还有多少可用的space。jvm 动态优化这个space,在这个过程中会不定期的 run out of free heap during the concurrent garbage collection。当这种情况发生的时候,如果打开了-Xverbose:memdbg,在verbose output中会有如下信息:
[DEBUG][memory ] [OC#55] Starting parallel sweeping phase.
[DEBUG][memory ] [OC#55] Will run parallel sweep due to: Alloc Queue Not Empty.
or
[DEBUG][memory ] [OC#55] Will run parallel sweep due to: Promotion Failed.
以上信息意为concurrent sweep不能及时完成,jvm在使用所有当前可用的资源来弥补。在这种情况下,parallel sweep被创建。如果jvm没能够适应并且以上信息始终出现,应用的性能就会受到影响。
避免这种情况,使用-XXgcTrigger指定一个空闲的heap space的百分比来触发一个garbage collection。如:
java -XXgcTrigger:20
该命令会在free heap大小低于20%的时候触发一个old generation garbage collection。
如果你使用parallel garbage collection策略(mark、sweep)每当heap完全full的时候old generation garbage collection会被执行。



如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论1 条评论

t001t001软件开发工程师传诚科技
2012-09-05 10:49
恭喜你,你的本篇博客被选举为9月第一周的首页精品博客
Ctrl+Enter 发表

作者其他文章

  • IBM jdk 1.4.2 并行参数
    评论 0 · 赞 0
  • 数据库优化
    评论 0 · 赞 2
  • 使用mvn进行j2ee构建
    评论 0 · 赞 0
  • IBM JDK 1.4.2 heap
    评论 0 · 赞 0
  • oracle 学习
    评论 0 · 赞 0
  • 相关文章

    相关问题

    相关资料

    X社区推广