gc实战分析

事件描述
3.1号凌晨1点,生成服务器出现fullgc告警,持续1小时

内存分析

在这里插入图片描述
在这里插入图片描述

引起原因
1点运行了凭证冲销的定时任务,定时任务是mapreduce类型,每次并发度5.其中查询凭证行会查询大量的数据,最大一台机器单次约21w+条数据。

jvm启动参数
-server -Xms4g -Xmx4g -Xmn2g -XX:+UseG1GC -XX:G1HeapRegionSize=8m -XX:+G1BarrierSkipDCQ -XX:SurvivorRatio=10 -XX:+ExplicitGCInvokesConcurrent -Dsun.rmi.dgc.server.gcInterval=2592000000 -Dsun.rmi.dgc.client.gcInterval=2592000000 -XX:ParallelGCThreads=2 -XX:+UseStringDeduplication -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Xlog:gc*:/home/admin/logs/gc.log:time -Xlog:age*=trace:/home/admin/logs/gc.log:time -XX:ReservedCodeCacheSize=256m -XX:MaxDirectMemorySize=1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs/java.hprof -XX:ErrorFile=/home/admin/logs/hs_err_pid%p.log -XX:+ParallelRefProcEnabled -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -DJM.LOG.PATH=/home/admin/logs-DJM.SNAPSHOT.PATH=/home/admin/snapshots -Dfile.encoding=UTF-8 -Dhsf.publish.delayed=true -DlimitTime=100 -Dproject.name=cf-finance -Dpandora.boot.wait=true -Dlog4j.defaultInitOverride=true -Dserver.port=7001 -Dmanagement.port=7002 -Dmanagement.server.port=7002 -Dahas.agw.type=2 -Dpandora.fast.classloader=true --patch-module jdk.unsupported=/home/admin/cf-finance/target/cf-finance/BOOT-INF/lib/jdk-patch-jdk.unsupported-0.3.1.jar -Dpandora.location=/home/admin/cf-finance/target/taobao-hsf.sar -classpath /home/admin/cf-finance/target/cf-finance -Dapp.location=/home/admin/cf-finance/target/cf-finance -Djava.endorsed.dirs= -Djava.io.tmpdir=/home/admin/cf-finance/.default/temp com.taobao.pandora.boot.loader.SarLauncher

分析
1点-1.07分出现了大批量gc,期间eden区数据直接接近0M,推测该期间出现了stw,并且stw线程只有2个,所以导致整个gc时间被拉长,触发了fullgc告警(该告警触发机制是gc时长超过300MM即告警),实时上gc日志也反应了这一点,标记耗时很高。

在这里插入图片描述
在这里插入图片描述

why
为什么 -Xmx4g,明显太小了不合理。系统有8g内存为啥只给4g?
该调度任务并发度为1,治标不治本,只是减少了一台机器同时处理的数据量,迟早有一天会被打爆。
综管的本地缓存需要治理。
冲销逻辑存在隐患,adb无事务,一旦冲销过程中出现中断,再次冲销凭证行会出现重复问题(不要以半夜不会重启为借口,机器很脆弱)。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值