
gc
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
一个简单案例,带你看懂GC日志!
环境准备这样一个案例程序:publicclassMain{publicstaticvoidmain(String[]args){byte[]array1=newbyte[4*1024*1024];array1=null;byte[]array2=newbyte[2*1024*1024];byte[]array3=newbyte[2*1024*1024];byte[]ar...转载 2020-10-14 17:39:25 · 867 阅读 · 0 评论 -
新一代垃圾回收器ZGC的探索与实践
很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰,作为新一代的低延迟垃圾回收器,ZGC在大内存低延迟服务的内存管理和回收方面,有着非常不错的表现。本文从GC之痛、ZGC原理、ZGC调优实践、升级ZGC效果等维度展开,详述了ZGC在美团低延时场景中的应用,以及在生产环境中取得的一些成果。希望这些实践对大家有所帮助或者启发。ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括: 停顿时间不超过10ms; 停顿时间转载 2020-08-07 09:46:34 · 490 阅读 · 0 评论 -
线上服务 FGC 问题排查,看这篇就够了!
线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力。同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验。过去半年时间里,我们的广告系统出现了多次和GC相关的线上问题,有Full GC过于频繁的,有Young GC耗时过长的,这些问题带来的影响是:GC过程中的程序卡顿,进一步导致服务超时从而影响到广告收入。这篇文章,我将以一个FGC频繁的线上案例作为引子,详细介绍下GC的排查过程,另外会结合GC的运行原理给出一份实践指南,希望对你有所转载 2020-07-20 21:42:38 · 772 阅读 · 2 评论 -
年轻代频繁ParNew GC,导致http服务rt飙高
背景介绍某日下午大约四点多,接到合作方消息,线上环境,我这边维护的某http服务突然大量超时(对方超时时间设置为300ms),我迅速到鹰眼平台开启采样,发现该服务平均QPS到了120左右,平均RT在2秒多到3秒,部分毛刺高达5到6秒(正常时候在60ms左右)。qps情况rt情况问题解决该服务是一个对内的运营平台服务(只部署了两台docker)预期qps个位数,近期没做过任何的线上发布,核心操作是整合查询数据库,一次请求最多涉及40次左右的DB查询,最终查询结果为一个多层树形结构,转载 2020-07-20 17:21:38 · 1570 阅读 · 2 评论 -
当对象不再使用时,不赋值为 null 会导致什么后果?
前言许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回答不出来了。鉴于网上有太多关于此问题的误导,本文将通过实例,深入JVM剖析“对象不再使用时赋值为null”这一操作存在的意义,供君参考。本文尽量不使用专业术语,但仍需要你对JVM有一些概念。示例代码我们来看看一段非常简单的代码:Javapublicstaticvoidmain(String[]...转载 2020-06-24 17:48:03 · 284 阅读 · 0 评论 -
研究了 2 天,终于知道 JDK 8 默认 GC 收集器了!
JDK 8 到底默认用的是哪款 GC 收集器?为啥是 JDK8?不是 9 也不是 10?因为 JDK8 还是市场占有率最高的,所以针对这个版本我做了深入的探索。《深入理解 Java 虚拟机》第三版第 128 页中提到 JDK 9 之前,Server 默认使用 Parallel Scavenge + Serial Old(PS MarkSweep),那么真的是这样的吗?我带着这个疑问做了如下验证 直接使用命令查看一下当前 JVM 默认参数 java-XX:+PrintComman...转载 2020-06-03 13:41:35 · 656 阅读 · 0 评论 -
一个线程池 bug 引发的 GC 思考!
问题描述前几天在帮同事排查生产一个线上偶发的线程池错误,逻辑很简单,线程池执行了一个带结果的异步任务。但是最近有偶发的报错:java.util.concurrent.RejectedExecutionException:Taskjava.util.concurrent.FutureTask@a5acd19rejectedfromjava.util.concurrent.Th...转载 2020-03-18 21:53:58 · 294 阅读 · 0 评论 -
图文并茂,万字详解,带你掌握 JVM 垃圾回收!
垃圾回收( Garbage Collection 以下简称 GC)诞生于1960年 MIT 的 Lisp 语言,有半个多世纪的历史。在Java 中,JVM 会对内存进行自动分配与回收,其中 GC 的主要作用就是清楚不再使用的对象,自动释放内存。GC 相关的研究者们主要是思考这3件事情。 哪些内存需要回收? 什么时候回收? 如何回收? 本文也大致按照这个思路,为...转载 2020-03-08 21:36:08 · 454 阅读 · 0 评论 -
必备面试题:系统CPU飙高和GC频繁,如何排查?
来源:http://t.cn/EI9JdBu处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用...转载 2019-07-02 10:35:54 · 597 阅读 · 1 评论 -
JVM发生频繁 CMS GC,罪魁祸首是这个参数!
了解 CMS GC 的同学,一定知道 -XX:CMSScavengeBeforeRemark 参数,它是用来开启或关闭在 CMS-remark 阶段之前的清除(Young GC)尝试。大家都知道CMS GC 只会回收 OldGen 的对象,那为什么需要这个参数? 由于 YoungGen 存在引用 OldGen 对象的情况,因此 CMS-remark 阶段会将 YoungGen 作为 OldGe...转载 2019-04-08 15:39:04 · 6312 阅读 · 1 评论 -
一些长时间GC停顿问题的排查及解决办法
对于许多企业级应用,尤其是OLTP应用来说,长暂停很可能导致服务超时,而对这些运行在JVM上的应用来说,垃圾回收(GC)可能是长暂停最主要的原因。本文将描述一些可能碰到GC长暂停的不同场景,以及说明我们如何排查和解决这些GC停顿的问题。下面是一些应用在运行时,可能导致GC长暂停的不同场景。1. 碎片化这个绝对要排在第一位。因为,正是因为碎片化问题--CMS最致命的缺陷,导致这个统治...转载 2019-03-28 23:21:07 · 1348 阅读 · 0 评论 -
JVM面试问题系列:JVM 配置常用参数和常用 GC 调优策略
JVM 配置常用参数堆参数回收器参数如上表所示,目前主要有串行、并行和并发三种,对于大内存的应用而言,串行的性能太低,因此使用到的主要是并行和并发两种。并行和并发 GC 的策略通过 UseParallelGC 和 UseConcMarkSweepGC 来指定,还有一些细节的配置参数用来配置策略的执行方式。例如:XX:ParallelGCThreads, XX:CMSInit...转载 2019-03-25 09:43:44 · 1554 阅读 · 0 评论 -
系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,...转载 2019-03-24 11:16:00 · 770 阅读 · 0 评论 -
Minor GC、Major GC和Full GC之间的区别
在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章、书籍和演讲来介绍我所做的工作。在整个过程中,经常对 Minor、Major、和 Full GC 事件的使用感到困惑。这也是我写这篇博客的原因,我希望能清楚地解释这其中的一些疑惑。文章要求读者熟悉 JVM 内置的通用垃圾回收原则。堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,代...转载 2019-03-19 10:09:00 · 14652 阅读 · 7 评论 -
OMG!又一个频繁FullGC的案例
将用户已安装APP数据从MySQL中迁移到MongoDB中。MySQL中存储方式比较简单,每个用户每个已安装的APP一行记录,且数据模型对应AppFromMySQL。迁移到MongoDB中,我们想更好的利用MongoDB的优势,所以其对应的数据模型为UserAppMongo,如果用JSON表示则如下所示:{ "id": "201811040001", "userId": "1...转载 2019-01-02 10:37:47 · 320 阅读 · 0 评论 -
假笨说-从一起GC血案谈到反射原理
概述公司之前有个大内存系统(70G以上)一直使用CMS GC,不过因为该系统对时间很敏感,偶尔会因为gclocker导致remark特别长(虽然加了-XX:+CMSScavReengeBeforeRemark参数,但是gclocker会导致remark前的YGC被delay),无法忍受这么长的暂停就只好迁移到了G1,经过一系列的调优之后算比较稳定了,这套参数便推到了全部机器上可是就在上周突...转载 2018-11-28 09:48:52 · 446 阅读 · 1 评论 -
一文读懂Java 11的ZGC为何如此高效
导读:GC是大部分现代语言内置的特性,Java 11 新加入的ZGC号称可以达到10ms 以下的 GC 停顿,本文作者对这一新功能进行了深入解析。同时还对还对这一新功能带来的其他可能性做了展望。ZGC是否可以达到该性能目标,请看高可用架构志愿者翻译的文章。Java 11的新功能已经完全冻结,其中有些功能绝对非常令人兴奋,本文着重介绍ZGC。Java 11包含一个全新的垃圾收集器--ZG...转载 2018-11-30 10:22:44 · 374 阅读 · 0 评论