`
clearity
  • 浏览: 36908 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GC调优:其实没有那么难

阅读更多

复杂的东西从来不讨人喜欢。处理内存泄露、线程死锁和GC调优这些问题在过去是很痛苦的。

这三种问题所带来的性能问题是最难重现的,可能带来的是无休息的bug修复。

尽管性能调优需要很好的洞察力,下面是LinkedIn工程师用来实现高吞吐量和低延迟的GC配置

选项:

 

-server -Xms40g -Xmx40g -XX:MaxDirectMemorySize=4096m -XX:PermSize=256m -XX:MaxPermSize=256m 
-XX:NewSize=6g -XX:MaxNewSize=6g -XX:+UseParNewGC -XX:MaxTenuringThreshold=2 
-XX:SurvivorRatio=8 -XX:+UnlockDiagnosticVMOptions -XX:ParGCCardsPerStrideChunk=32768 
-XX:+UseConcMarkSweepGC -XX:CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled 
-XX:+CMSClassUnloadingEnabled  -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly 
-XX:+AlwaysPreTouch -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps 
-XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:-OmitStackTraceInFastThrow

 

在获取这目前来说最佳配置的过程中,LinkedLin的工程师们肯定也也经历过下面相似的过程:

 

复杂的东西从来不讨人喜欢。处理内存泄露、线程死锁和GC调优这些问题在过去是很痛苦的。

这三种问题所带来的性能问题是最难重现的,可能带来的是无休息的bug修复。

尽管性能调优需要很好的洞察力,下面是LinkedIn工程师用来实现高吞吐量和低延迟的GC配置

选项:

 

  1.收集环境信息。在进行调优之前,你需要明白当前的问题是什么,在特殊情况下,表现为

  长时间和频繁的GC停顿,也其实只是死锁和内存泄露造成的。或者其他相关的情况。但是我们

  假设你选对了调优的地方。

  2.下一步,你需要收集关于GC停顿的信息。-XX:+PrintGCDetails -XX:+PrintGCTimeStamps可以

  获取GC停顿的信息。

  3.现在,需要分析这个信息,但是如果你没有这方面的经验的话,还是不鼓励你去阅读几百页的

  GC文件

但是我们假设你能在日志文件中找到问题所在。你就必须搞清楚在什么情况下需要使用CMS或者G1收集器

(新生代配置-XX:+UseParNewGC,老年代配置-XX:+UseConcMarkSweepGC),并且理解清楚伊甸园区和存活区的

比例关系以便很好的设置他们的空间大小(-XX:NewSize=6g -XX:MaxNewSize=6g -XX:MaxTenuringThreshold=2 -XX:SurvivorRatio=8)。

 

到现在其实才刚开始 -- 还有很多可以使用的调优选项,比如优化堆碎片甚至处理系统的大页交换功能,还有

-XX:ParGCCardsPerStrideChunk配置选项。

各虚拟机版本支持的选项有很多,不一一列出,可以针对具体问题查询相应版本的选项设置

分享到:
评论

相关推荐

    RGW 的GC深入解析与调优

    每个 GC worker 启动的时候都会有一个数字 ID 标识,这个 ID 其实就是对应到 gc pool 里面的 Object 的 ID 名称,GC 的任务列表就存储在每个 gc pool 里面对应的 Object 的 omap 中。 GCworker 的随机选择算法: ...

    java学习之JVM调优相关说明

    其实听着JVM调优这个词有些高大上,但是等你真正了解了他的内在原理后,还是很容易的。再简单 JVM调优大致可分为如下: 解决JVM运行过程中的问题(主要就是内存溢出的问题) 优化JVM运行时的环境,提高运行速度与...

    2023最新BAT java经典必考面试题.zip

    - 性能调优:GC算法、堆大小设置、JVM参数优化等。 10. **Spring框架**: - Spring核心:依赖注入(DI)、面向切面编程(AOP)。 - Spring MVC:控制器、模型、视图解析、数据绑定。 - Spring Boot与Spring ...

    Java的21个技术点和知识点归纳(推荐)修改版.pdf

    - **GC原理**:掌握垃圾收集的基本概念、算法和调优技巧。 - **性能调优**:通过Thread Dump分析内存结构,理解如何进行JVM优化。 - **类加载过程**:理解类加载的双亲委托模型,以及加载、验证、准备、解析和...

    java高级理论-2

    2. **内存管理**:Java的垃圾收集器GC是自动内存管理的重要组成部分,理解不同类型的GC算法(如Minor GC、Major GC、Full GC)及其工作原理,以及如何通过调整JVM参数来优化内存分配和垃圾回收,能有效避免内存泄漏...

    Java 学习笔记极其详细版(包括一些个人色彩不仅仅是纯笔记)

    ### Java 学习笔记极其详细版(包括一些个人色彩不仅仅是纯笔记) ...本笔记旨在帮助读者全面了解Java语言,并掌握其实战技能。无论是初学者还是有一定基础的学习者,都可以从中获得有价值的知识点。

    北京五洲商慧技术有限公司Java笔试面试题.zip

    8. **性能监控与调优**:JProfiler、VisualVM等工具的使用,以及CPU、内存、GC等方面的性能优化。 9. **Java新特性**:Java 8及更高版本的新特性,如Lambda表达式、Stream API、Optional类等。 面试或笔试可能会...

    MLDN的JAVA笔记大全

    - **HashSet与HashMap**:集合框架中的Set和Map接口,以及其实现类,用于存储和管理无序和键值对的数据。 5. **输入/输出流** - **I/O流的概念**:JAVA中的输入/输出流系统用于处理数据的读写,包括字节流和字符...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    ASP.Net中控件数量是非常多的,讲解ASP.Net的教材通常要上千页,让初学者望而生畏,其实ASP.Net大部分控件相似性非常强的,同类型的控件学会了一个那么其他控件也就很容易学会了。比如只要学会了DropDownList,那么...

    JAVA面试必备必知必会

    其次,集合框架是Java开发者必须精通的部分,包括List、Set、Map接口以及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。面试中可能会涉及到它们的实现原理、性能特点以及在不同场景下的选择。另外,了解...

Global site tag (gtag.js) - Google Analytics