`
chenchao051
  • 浏览: 137545 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

诡异的超长时间GC问题定位

阅读更多

HBase的GC策略采用PawNew+CMS, 这是大众化的配置,ParNew经常会出现停顿时间特别长的情况,有时候甚至长到令人发指的地步,例如请看如下日志:

2012-10-17T05:54:54.293+0800: 739594.224: [GC 739606.508: [ParNew: 996800K->110720K(996800K), 178.8826900 secs] 3700515K->2985396K(6180736K), 187.4174260 secs] [Times: user=1.70 sys=2.42, real=191.35 secs] 

不要慌,因为我也没见过这么长的GC,既然GC这么长,直接导致的问题就是HBase连接ZK的session超时,而HBase在rs超时的情况下,会让自己挂掉(这样处理显然也是合理的)。关于session可以参看另外两篇博文,http://crazyjvm.iteye.com/blog/1701032http://crazyjvm.iteye.com/blog/1693757

另外要补充的是,在这台服务器上还运行着hadoop和redis, 这两个应用都狂吃内存,所以第一反应就是因为swap导致了这个问题,对swap不太了解的可以参看https://www.linux.com/news/software/applications/8208-all-about-linux-swap-space/,我看了下我们的swappiness的值是60,总共可用swap空间是32G多!那么事情就是这么发生了,我们会定时的向HDFS上插数据,数据量不小,这个时候Linux就会使用buffer把write的数据给缓存起来,另一方面,redis也会定期的灌数据(10G+),这样buffer肯定就不小了,当然读的操作也会不少,那么Cache使用起来也很厉害(当然,比buffer猛多了),虽然说这么空间不是真正的算在内存使用里面,但是它却会导致swap的发生,它让那些在内存中的部分未使用数据swap进硬盘了,对了,别忘了,这台服务器上还有hadoop哦,火力全开的跑job,内存火箭般的升上去了,我看了下hbase进程,swap出去的内存基本都50%以上了,那内存回收的时候能快吗?

再解释下,为什么ParNew的时候慢,而CMS的时候基本没事呢。熟悉GC的同学应该瞬间就想到了,ParNew采用的是Copy算法,它要把eden以及一个survivor区域中的存活对象复制到另外一个survivor区域中,这样就相当于GC时要对硬盘进行随机读写的行为了,能快吗?另一方面(这点我不确定,可能没啥问题),CPU在那个时刻使用率极高,影响了回收线程的工作(不过应该没啥问题)。 说说CMS,CMS采用的是MARK-SWEEP算法,它只管标记和删除,不用复制,更重要的是,在逻辑上,Old Gen的大多数对象仍然在内存中,显然会好很多,至于COMPACT的步骤就在CMS失败的情况下由Parallel Old收集器来做了,这个收集器是MARK-COMPACT算法。当然了,UseCMSCompactAtFullCollection和CMSFullGCsBeforeCompaction有助你结合CMS完成COMPACT的过程。

 

SWAP影响这么大的原因有几点,我们先不去看置换算法之类的影响,最大头的寻道时间和旋转延迟时间就说明问题了,如果读磁盘上分散的很厉害的数据,那么效率肯定非常低,因为每次都需要重新寻道,并且加上旋转延迟。如果数据全部在一起,是连续的,那么磁盘的表现是相当厉害的,这一点也正是hadoop的基础。(擦!字体怎么变不了 ?)

 

 

对GC不熟悉的同学肯定需要好好地去补下了,使用JVM平台不熟悉GC,说不过去。如果在运行过程中有另外的发现,再补上吧。

分享到:
评论

相关推荐

    一次诡异的full gc查找问题全过程

    在本篇文章中,我们将分享一个 Full GC 问题排查过程,通过示例代码和实际操作,介绍了如何快速定位 Full GC 问题的原因和解决方案。 问题描述 在我们的服务中,突然出现了频繁的 Full GC 问题,而服务本身没有...

    gcviewer监控gc工具

    2. **内存泄漏检测**:长时间运行的应用如果内存持续增长,可能有内存泄漏,GCViewer能辅助定位问题。 3. **JVM配置优化**:根据GCViewer提供的数据,调整JVM的内存分配和垃圾收集器设置,提高系统性能。 总之,GC...

    GCViewer-FullGC分析工具

    使用GCViewer,开发者可以更直观地了解Java程序的内存行为,定位可能导致性能问题的GC活动。在实际应用中,通常结合JVisualVM或其他监控工具一起使用,以便获取更全面的系统状态信息。 总结来说,GCViewer是一款...

    ESP32驱动GC9A01圆形屏幕显示图片视频时间.zip

    这个项目主要是关于如何使用ESP32来驱动GC9A01屏幕,实现显示图片、视频和时间的功能。 在ESP32与GC9A01的交互过程中,首先需要理解GC9A01的接口协议,通常包括SPI或RGB接口。SPI是一种高速、全双工通信协议,适用...

    SENSOR_GC1054.rar_1054-sensor_SENSOR_GC1054_gc1054

    标题中的"SENSOR_GC1054.rar_1054-sensor_SENSOR_GC1054_gc1054"暗示了我们正在处理一种名为GC1054的传感器,这可能是一款专用于图像处理的传感器。在IT行业中,这类传感器通常被应用于摄像头设备、机器视觉系统或...

    GC2053_1,2.9"GC2053sensor_格科微_GC2053_gc2053datasheet_galaxycore_

    GC2053采用的CMOS工艺使得它在保持高图像质量的同时,能有效降低设备的运行能耗,延长电池寿命,适用于需要长时间工作的设备。 此外,GC2053的Data Sheet提供了详细的技术参数,如感光度、信噪比、动态范围等,这些...

    visualgc插件离线安装包

    尤其在处理大规模应用或者遇到性能问题时,VisualGC的直观展示能够为问题定位提供有力的支持。 当我们在VisualVM中找不到VisualGC模块时,可以手动进行离线安装。首先,我们需要下载VisualGC的插件文件,这个文件...

    GC6153_SERIAL_GC6153

    标题 "GC6153_SERIAL_GC6153" 指向的是一款基于MTK(MediaTek)平台的驱动程序,专为控制SPI接口的GC6153芯片而设计。这款驱动程序的主要功能是确保GC6153芯片在系统中能够正确地被初始化、配置和操作,从而实现其...

    visualGC.zip

    《VisualGC:JVM堆内存GC可视化神器》 在Java开发过程中,理解并优化JVM的内存管理...在进行JVM调优时,结合VisualGC的数据和分析,我们可以更准确地定位问题,避免盲目调整参数带来的风险,提升系统的稳定性和效率。

    摄像头gc0308资料.rar

    GC0308的寄存器初始化配置是其正常工作的重要环节,因为这些寄存器控制着传感器的各种参数,如曝光时间、增益、分辨率、帧率等。 寄存器初始化配置是摄像头初始化过程的核心部分,它确保摄像头在启动时能按照预期...

    GCviewer-1.35 GC分析工具

    然而,过度或不适当的GC活动可能导致性能问题,如暂停时间过长或内存利用率低下。 ### 二、GCviewer的作用 GCviewer是用于可视化和分析这些GC活动的工具,它可以显示GC事件的详细日志,包括: 1. **GC事件的频率*...

    gcviewer-1.35-SNAPSHOT

    这些视图可以独立或组合使用,帮助开发者定位问题所在。 5. **自定义配置与导出报告**: 用户可以根据需求调整显示参数,如时间窗口、颜色编码等,以便更清晰地呈现特定关注点。此外,分析结果可以导出为图片或CSV...

    gc4023 datasheet

    GC4023 CMOS图像传感器数据手册 GC4023是一款高性能的CMOS图像传感器,用于capturing高质量图像。该传感器具有1/2.7英寸的感光面积、4Mega像素的高分辨率和低噪音的特点。该传感器的datasheet提供了详细的技术规格...

    gcviewer-1.33

    GCViewer能够解析这些日志,将其转化为直观的图表,如GC暂停时间、内存区域的变化、对象分配速率等,帮助开发者快速定位问题。 其次,GCViewer支持多种GC算法的分析,包括串行GC、并行GC、CMS(Concurrent Mark ...

    gcviewer.rar

    GCViewer通过其丰富的可视化功能,帮助我们追踪GC事件,识别可能导致性能瓶颈的问题,例如过长的垃圾收集暂停时间(Stop-the-World现象)、内存分配不合理等。此外,它还可以帮助我们验证和调优JVM的垃圾收集器设置...

    gc02m1 datasheet

    GC02M1 datasheet GC02M1是一款CMOS图像传感器,具有高分辨率、低噪声和高灵敏度等特点。下面是根据GC02M1 datasheet的内容生成的相关知识点: 1. 传感器概述 GC02M1是一款1/5英寸的CMOS图像传感器,具有200万像素...

    MT65xx_GC032A_Driver_20170614_GC032A_GC032A_Drive

    《MT65xx_GC032A_Driver_20170614_GC032A_GC032A_Drive》是一款专为MT65xx平台设计的GC032A图像传感器驱动程序,它在原有的厂家驱动基础上进行了一些定制化的改进,以优化性能和效果。此驱动程序的更新日期为2017年6...

    有问题机器gc日志

    机器 gc 日志上传,用于分析问题,主要是 查看gc有无问题

    GC5025.tar.gz_RK camera_camera_gc5025 RK3368_gc5025驱动_rk摄像头驱动

    《GC5025.tar.gz:RK3368平台上的GC5025摄像头驱动详解》 在嵌入式系统开发中,摄像头驱动扮演着至关重要的角色,它连接硬件设备与软件应用,使得图像捕获和处理成为可能。本文将深入探讨针对RK3368平台的GC5025...

Global site tag (gtag.js) - Google Analytics