【实战】因业务需求,服务实时数据访问非常多,启动就FullGC问题解决

线上说明:服务器和设备是长连接,挂掉重启后,几千台设备长连接数据过来很多;

出现问题点:redis 采用jedisPool连接池,多线程调用下,连接4分片集群Redis,连接数1500条,                        jedisPool.getResource() 出现为空,连接数不够用,疯狂报错;

造成结果:服务线程数猛增,大量报错,服务启动失败,需要通过控制端口开关进行开启和关闭;

经jstat 检查:启动到大批量设备连上期间——FullGC 十几次 YGC 更是超过200+;

检查:

1.一开始以为是Redis 线程不够用,从1500新增到2000再到3000条,服务更是卡死,判断和连接池无关;

2.加大堆栈大小,重新分配老年代和新生代比例,怎么调整都失效

3.看了java1.8 jvm相关信息,还有永久代对应的数据,1.8以后元数据移到一个新的区域中,称为Metaspace;Metaspace的初始大小,默认值为21M,看了别人的配置,启动脚本新增-XX:MetaspaceSize=256m,问题解决,看了下具体的GC内容:

启动后FULLGC 为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值