我的应用程序部署在Solaris上运行的weblogic上,采用双SPARC T4 8核3.0 GHz.这个weblogic实例正在使用g1 gc,我认为可以改进当前的配置:

GC_OPTIONS=" -server -XX:ConcGCThreads=4 -XX:+UseG1GC -XX:+DisableExplicitGC

-XX:MaxGCPauseMillis=300 -XX:GCPauseIntervalMillis=1000 -XX:+UseNUMA

-XX:+UseCompressedOops -XX:ReservedCodeCacheSize=128m

-Dweblogic.ThreadPoolPercentSocketReader=50 -Dweblogic.ThreadPoolSize=100

-Dweblogic.SelfTunningThreadPoolSizeMin=100 "

令我感到震惊的是,ConcGCThreads已经设置好,而没有为ParallelGCThreads建立一个值.我认为这将使这两个值显示出合理的比例是一个良好的开端.甲骨文的文档说:

-XX:ParallelGCThreads=n

Sets the value of the STW worker threads. Sets the value of n to the

number of logical processors. The value of n is the same as the number

of logical processors up to a value of 8.

If there are more than eight logical processors, sets the value of n

to approximately 5/8 of the logical processors. This works in most

cases except for larger SPARC systems where the value of n can be

approximately 5/16 of the logical processors.

但我被告知这128个“逻辑处理器”中有64个是为数据库保留的,其余的是为运行Tuxedo和weblogic服务器而共享的.假设有两个weblogic实例,并且认为tuxedo和wl实例消耗相同数量的threds是安全的,可以认为(64/3)*(5/16)〜= 6或7个ParallelGCThreads和因此,1个或最多2个ConcGCThreads是可以接受的.

你认为这些是开始调整的合理值吗?任何建议都是受欢迎的.

编辑:截至今天,我已经启用了GCDetails生成的一些日志.这是它在gc viewer中的外观

我的解释:

>当用户执行任务时,堆使用量会慢慢增长

>终身堆使用(蓝色曲折下的洋红色线代表整体使用的堆)也有,尽管在终身代中仍有相当数量的可用空间

>恰恰相反,年轻一代的边缘很稀缺,需要稳步收集垃圾

>虽然没有什么能让这张照片立即令人不安,但趋势是向上的.此外:gc暂停时间(如果不涉及初始标记,略大于1s,否则几乎为2s)远远超过300ms的目标目标

只是显示垃圾收集日志:

2014-01-16T11:18:12.728+0100: 50293.457: [GC pause (young), 1.36713100 secs]

[Parallel Time: 1308.6 ms]

[GC Worker Start (ms): 50293458.0 50293458.0 50293458.0 50293458.1 50293458.1 50293458.1 50293458.2 50293458.2

Avg: 50293458.1, Min: 50293458.0, Max: 50293458.2, Diff: 0.2]

[Ext Root Scanning (ms): 982.5 174.5 146.2 150.6 170.6 139.6 154.5 158.8

Avg: 259.7, Min: 139.6, Max: 982.5, Diff: 842.9]

[Update RS (ms): 0.0 16.9 36.2 42.3 18.6 54.6 38.8 34.9

Avg: 30.3, Min: 0.0, Max: 54.6, Diff: 54.6]

[Processed Buffers : 0 15 21 31 18 27 11 21

Sum: 144, Avg: 18, Min: 0, Max: 31, Diff: 31]

[Scan RS (ms): 0.2 9.8 9.7 8.7 10.0 10.0 8.1 9.0

Avg: 8.2, Min: 0.2, Max: 10.0, Diff: 9.8]

[Object Copy (ms): 275.1 132.6 142.2 131.8 133.9 129.4 131.9 130.5

Avg: 150.9, Min: 129.4, Max: 275.1, Diff: 145.6]

[Termination (ms): 0.0 924.0 923.4 924.2 924.5 924.0 924.3 924.5

Avg: 808.6, Min: 0.0, Max: 924.5, Diff: 924.5]

[Termination Attempts : 1 1049 1140 1011 881 979 894 780

Sum: 6735, Avg: 841, Min: 1, Max: 1140, Diff: 1139]

[GC Worker End (ms): 50294715.8 50294715.9 50294716.0 50294715.9 50294715.9 50294715.9 50294715.9 50294715.9

Avg: 50294715.9, Min: 50294715.8, Max: 50294716.0, Diff: 0.1]

[GC Worker (ms): 1257.9 1257.9 1257.9 1257.9 1257.7 1257.8 1257.7 1257.7

Avg: 1257.8, Min: 1257.7, Max: 1257.9, Diff: 0.3]

[GC Worker Other (ms): 50.8 50.8 50.7 50.8 50.9 50.9 50.9 50.9

Avg: 50.8, Min: 50.7, Max: 50.9, Diff: 0.2]

[Clear CT: 1.1 ms]

[Other: 57.4 ms]

[Choose CSet: 0.1 ms]

[Ref Proc: 49.8 ms]

[Ref Enq: 0.1 ms]

[Free CSet: 5.9 ms]

[Eden: 1322M(1322M)->0B(1312M) Survivors: 68M->78M Heap: 4494M(6952M)->3182M(6952M)]

[Times: user=9.12 sys=0.18, real=1.37 secs]

到目前为止,没有疏散失败,大量的物体分配或完整的垃圾收集事件.有一点,如果服务器被阻止,除了诱导一个完整的gc之外别无选择.

有8名并行工人;由于ConcGCThreads设置为4,我想我可以设置ParallelGCThreads = 16或将ConcGCThreads减少到2.不确定哪个选项更好,可能前者是.但毕竟它可能不那么重要.

参考处理时间一直很高.着名的Beckwith文章提到:

If you see high times during reference processing then please turn on

parallel reference processing by enabling the following option on the

command line -XX:+ParallelRefProcEnabled.

这是我绝对认为我应该做的事情,肯定会.

然而,主要问题是如何减少gc暂停的长度.更高的ParallelGCThreads可能有所帮助,但也许这个问题与过于雄心勃勃的暂停时间有关;正如Oracle教程所说:

Instead of using average response time (ART) as a metric to set the

XX:MaxGCPauseMillis=, consider setting value that will meet the

goal 90% of the time or more. This means 90% of users making a request

will not experience a response time higher than the goal. Remember,

the pause time is a goal and is not guaranteed to always be met.

所以我认为它也可以帮助建立一个更真实的MaxGCPauseMillis,比如600ms.如果要实现这样的目标,大多数用户都会非常高兴.如果暂停时间超过2秒,他们可能不会.您认为此参数是进一步调整的候选者还是有任何其他建议?

问候

java g1 gc ref proc_java – 针对sparc T4 8核的正确G1 GC调优相关推荐

  1. 在Java层面(window和Linux系统)下的常用性能监控与调优工具的命令及操作

    前言 总结,学习,发现问题,再总结,避免以后,在需要的时候抓狂! jvm中的gc的参数解释 年轻代survivor(幸存区) S0C 年轻代中第一个survivor(幸存区)的容量(kb) S1C 年 ...

  2. java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    java jvm调优 我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候才 ...

  3. JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

    JVM(Java虚拟机) JVM 内存模型 结构图 jdk1.8 结构图(极简) jdk1.8 结构图(简单) JVM(Java虚拟机): 是一个抽象的计算模型. 如同一台真实的机器,它有自己的指令集 ...

  4. Java服务GC参数调优案例

    这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题.我个人特别喜欢这种实战类的内容,经原作者的授权同意,将文章分享于此.原文链接:Java服务GC参数调优案例,下面为 ...

  5. 一文看尽 JVM GC 调优

    一个著名的学习方法论 向橡皮鸭求助 学会提问,提问也是一门艺术 提问前,先投入自己的时间做好功课 发生了什么事情 问题的基本情况 你投入的研究和发现 能正确提出你的问题,你的问题差不多已经解决一半 深 ...

  6. 几张图可以理解GC JVM调优的内容

    public class ApiPurchaseOrderServiceApp {public static void main(String[] args) throws Exception {Ap ...

  7. 再谈GC3:GC调优思路与常用工具

    5. GC 调优(基础篇) - GC参考手册 2017年02月14日 17:41:49 阅读数:4893 说明: Capacity: 性能,能力,系统容量; 文中翻译为"系统容量" ...

  8. java性能保障技术_狙击P7!阿里大佬亲授“Java性能调优技术宝典”,太完整了!...

    一.前言 什么是性能调优? 性能调优其实很好理解,就是优化硬件.操作系统.应用之间的一个充分的协作,最大化的发挥出硬件的极致性能,来应对高负载的业务需求. 为什么需要性能优化? 其实说到底就是两个原因 ...

  9. java jvm调优面试题_【Java面试题第一期】有没有jvm调优经验?调优方案有哪些?...

    ​1. 调优时机: a. heap 内存(老年代)持续上涨达到设置的最大内存值: b. Full GC 次数频繁: c. GC 停顿时间过长(超过1秒): d. 应用出现OutOfMemory 等内存 ...

最新文章

  1. # 异运算_小学数学整数、小数、分数加减法运算法则及练习(可打印)
  2. 选择“Win32汇编”的三大理由?
  3. 1270: [BeijingWc2008]雷涛的小猫
  4. python自学行吗-自学python有用吗?
  5. 用VS调试 javascript
  6. c语言科学计数法输出1_e10,北航13年机试--十进制数字的科学计数法表示的C语言实现...
  7. 蓝鸽集团云计算机,‎App Store 上的“蓝鸽教育云”
  8. STM32自举程序原理和使用
  9. 观测云产品更新|新增阿里云账户结算方式;新增 DQL 查询查看器;新增基础设施网络模块等
  10. Unity3D--学习太空射击游戏制作(四)
  11. 小武与YOLOv3 ---- 优图代码
  12. 如何在Mac上解决蓝牙问题
  13. XenDesktop7.12发布Win10周年更新版桌面
  14. 《Photoshop蒙版与合成(第2版)》—第1章合成的历史
  15. Excel找最大值操作
  16. indexedDB使用
  17. Android软键盘弹出和收起的监听
  18. 第四章 JavaWeb CSS入门 核心基础 基础形式 + 选择器
  19. V模型,W模型,H模型介绍
  20. Hash中的bucket什么意思?

热门文章

  1. C++ char 与uchar区别
  2. char*,const char*,string的相互转换 C++
  3. MonoRec:无需激光雷达,只需单个相机就可以实现三维场景的稠密重建
  4. 解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
  5. VSCode如何自动换行,右侧换行间距长度,隐藏右侧代码预览(Minimap代码缩略图滚动条),比对代码差异窗口也自动换行
  6. 在CentOS 6.9 x86_64上开启nginx 1.12.2的proxy_cache缓存配置
  7. ATS中开启Refer防盗链功能
  8. C++中stl使用过程中的一些tips
  9. Rocksdb 的 rate_limiter实现 -- compaction限速
  10. nginx反向代理原理及配置详解