针对《我的世界》服务器卡顿问题,优化方案通常涉及JVM启动参数、服务端核心选择、核心配置文件以及插件/模组管理。以下内容基于主流服务端(如Paper、Spigot、Purpur等)整理,提供可直接使用的优化代码与配置,但需根据服务器版本、内存大小和在线人数微调。

一、选择更优的服务端核心:Paper 或 Purpur 比原版Vanilla和CraftBukkit、Spigot在区块生成、实体AI和红石运算方面有更优秀的性能优化。在服务端软件层面,Paper内置了多项异步和缓存机制,可显著降低卡顿。
二、JVM启动参数(最重要的“代码”):启动脚本中的GC(垃圾回收)和内存参数直接影响卡顿。推荐使用G1GC或ZGC(Java 21+),并禁用Swapping。一个适合4-8GB内存的Paper服务端启动参数示例:
java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui
其中-Xms和-Xmx设为相同值可避免堆内存动态调整;-XX:+AlwaysPreTouch会在启动时预占物理内存,减少运行期卡顿;-XX:MaxGCPauseMillis=200控制GC暂停时间。注意,如果使用Java 21,可尝试-XX:+UseZGC以最大化降低停顿,但需测试兼容性。
三、server.properties关键优化项:在服务端根目录的server.properties中,调整以下参数可减少卡顿:
view-distance=6 (视距越小,区块加载越少,建议5-8)
simulation-distance=5 (模拟距离,限制实体和红石的活动范围)
max-players=20 (根据机器性能限制上线人数)
network-compression-threshold=512 (提高压缩阈值,降低CPU负担,过大则增加带宽压力)
spawn-monsters=true (若机器较弱可设为false,但影响原版玩法)
max-tick-time=-1 (设为-1可禁止服务器因单个tick超时自动重启,避免误判卡死)
四、Paper/Spigot核心配置优化( config/paper-global.yml 或 spigot.yml ):
在paper-global.yml中设置:
chunk-loading:
max-concurrent-sends: 2
chunk-parallelism: 8 (适度增加并行加载线程,利用多核CPU)
entity-activation-range:
animals: 16
monsters: 24
raiders: 24
misc: 8 (缩小实体激活范围,远处实体不运算)
tick-rates:
behavior: 1 (可适当提高为2,减少行为循环频率)
在spigot.yml中:
mob-spawn-range: 4 (缩小刷怪范围,降低计算量)
ticks-per:
animal-spawns: 400
monster-spawns: 400
autosave: 6000 (降低自动保存频率,但需注意崩溃丢档风险)
五、优化插件与反卡顿代码:安装ClearLag类插件定时清理掉落物和实体,使用ProtocolLib时避免过度发包。在控制台或命令方块中可执行:
/gamerule maxEntityCramming 20 (减少挤死实体带来的卡顿)
/gamerule mobGriefing false (关闭方块破坏,减少TileEntity运算)
/tp @e[type=item] ~ -200 ~ (定期清除掉落物)
六、数据库与异步处理:若使用多世界插件或复杂商店,确保使用HikariCP连接池,并开启async-chunk-save(Paper默认开启)。在bukkit.yml中设置:
database:
url: jdbc:mysql://localhost:3306/minecraft?useSSL=false&rewriteBatchedStatements=true
username: root
password: 密码
driver: org.mariadb.jdbc.Driver (使用MariaDB驱动比默认MySQL驱动更快)
七、结构性规划减少卡顿:避免超大型红石机器同时运行;限制漏斗和实体数量(可用插件设置每区块上限);定期重启服务器(例如每12小时一次,清理内存碎片)。经验表明,玩家聚集区的冗余区块和实体是卡顿主因,运营者应配合地图插件预生成区块,减少新区块实时生成压力。
八、终极“代码”示例:一个综合优化后的start.sh启动脚本(Linux):
#!/bin/sh
java -Xms6G -Xmx6G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -jar paper-1.20.4.jar --nogui
同时配合server.properties中的view-distance=5、simulation-distance=4,可保证绝大多数中端服务器(4核8G)在50人以下不出现明显TPS下降。若使用Paper,可在控制台输入/tps查看当前TPS,若TPS长期低于18,则需要进一步降低视距或限制实体数量。
最后提醒:没有任何代码能保证完全不卡顿,硬件、网络、玩家行为、插件质量都会影响性能。请先尝试使用Paper或Purpur,再逐步套用上述参数,并通过Spark插件(/spark profiler)定位真正的性能瓶颈后精准优化。

查看详情

查看详情