改变jvm垃圾收集器参数,来给我的世界forge服务器调优

背景

为了给我的web项目上线,我租了一个2核2g的腾讯云服务器,上线后突发奇想能不能开一个mc服务器,让自己和朋友随时能玩我们的生存房间,而不用每次等开房的朋友。

问题

开了房之后加了十多个mod,可视距离和加载区块为1,用的java17,g1垃圾收集器默认配置,三个人同时玩,没有传送的情况下每十多秒就会出现一两次两道三秒的延迟,两个人玩没问题。

解决思路

1.用jconsole(jdk自带的图形化工具,在bin目录)查看堆的使用情况,不同gc使用的时间,结合垃圾回收机制改参数。

2.改用parallel垃圾收集器,或者串行垃圾收集器。cms在jdk14就删除了,所以就没尝试。

3.另外游戏中的优化就不赘述了。

结果

实际测试(根据朋友一起玩的体验(三个人活跃的玩),包括晚上一起打同时存在二十多只怪的地方,每五秒传送一次(传送一次大概加载9个区块))得出:

1.parallel收集器老年代基本没有增长(不触发fullgc,minorgc大概一分钟七次,主要停顿时间是10ms以内,传送的时候会有40~70ms的停顿);只有一秒传送一次这种负荷大的操作会令老年代较为快速增长(大概十分钟老年区就会满),用烟花鞘翅探图的话大概两分钟老年区就会满,从而触发fullgc(停顿10到20秒)。也就是一般强度玩,延迟能接受;高强度玩时fullgc的时候超高延时。

参数:

-XX:Xmx=1700M

-XX:Xms=1700M

-XX:+UseParallelGC
-XX:MaxTenuringThreshold=7    最大年龄;探地图到一个地方大概60s之后这些内存就会到old区,避免在survivor区里面复制来复制去浪费时间,想这些内存不到oid区就60之内离开就可以了
-Xmn400m
-XX:SurvivorRatio=8     设置survivor大小为四十mb,也就是同时存活超过40mb就进入老年代,免得复制算法消耗时间

-XX:-UseAdaptiveSizePolicy    禁用自适应对survivor和eden的大小调整才会有效,也会让-XX:TargetSurvivorRatio指令失效


-XX:PretenureSizeThreshold=1M

 

2.G1收集器无论怎么改参数(我尝试了一上午),几秒钟就会有一次两三秒的延迟,不是fullgc,它的好处就是mixgc,慢慢降低老年代的占用,怎么玩都不会fullgc,但平时的延迟难以接受。

实验过程

下次再写

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值