* 零 – 系统的选择 *

(网页后台可以跳过本段)关于系统的选择,Linux类系统(Centos、Redhat等)固然高效、稳定,但选择系统也一定要考虑到自己的熟悉程度和学习能力。不要盲目为了高效而选择一个自己完全不熟悉甚至从未使用过的系统,一旦出现了突发情况,原本只需要几分钟解决的问题由于不熟悉系统的操作用几个小时来解决,这样真的合适么?在内存足够使用的情况下,Windows和Linux开服的性能差距几乎可以忽略。但是如果你熟悉Linux的操作,我依然会推荐你使用Linux系统,毕竟大服需要的Mysql、Redis在Linux下的性能往往高过Windows不少。如果你有较强的学习能力,打算入坑Linux开服,我会推荐你使用Centos6.6(稳定性突出、可靠性不俗、大量教程和文档)。

* 一 – JVM版本的选择 *

(网页后台可以跳过本段)JVM(Java Virtual Machine)也就是Java虚拟机,俗称Java运行环境。关于选择JRE还是JDK的选择,我推荐使用JDK,JDK包括运行环境(JRE),在此基础上增加了一些性能调优工具如VisualVM。而JVM的版本,非常不推荐使用Java6,因为有不少插件已经放弃了Java6的支持。Java7和Java8则是不错的选择,如果不是模组服务器,推荐使用Java8,Java8相比Java7主要的性能提升便在于HashMap上,而无论Minecraft服务端本身还是插件都大量使用了HashMap。所以对于Minecraft服务器来说,使用Java8带来的性能提升还是比较可观的。

* 二 – 服务端的选择 *

从服务端的选择开始就注定了性能优劣的起步水平,现在依然有不少人认为CraftBukkit(水桶服)的兼容性、稳定性要远远好于Spigot(水龙头)。然而这是一个误区,Spigot是在CraftBukkit基础上优化而来的,几乎100%兼容原有的插件API,所以可以认为只要同版本水桶服能用的插件就可以在Spigot上运行。如果你选择使用1.7.10以下的版本开服(纯净服),强烈推荐你使用Spigot服务端,Spigot相比水桶服拥有近百项的优化,例如异步加载、读取区块,限制实体的活动范围,修复一些内存泄露的问题等等。所以同版本下可以很容易感受到Spigot有着更出色的性能和更低的内存占用。如果你开服的版本在1.8+,我会推荐你使用PaperSpigot服务端,这款服务端是在Spigot基础上优化而来的,相比Spigot有着显著的性能提升(Tiles几乎不再消耗CPU时间,爆炸算法优化,红石不再卡服,流水算法优化,区块压缩节约内存,优化Spigot自带的Anti.X-ray等等),并且有许多可自定义项目(船损坏依然掉落船,各种地形生成的开关等等)。在最后需要提醒的是,如果没有特殊原因,建议使用最新版本的服务端,最新版本的服务端往往修复了目前已知的绝大多数BUG和有着更多的性能提升。例如目前的1.8.8版本就比1.8.7多修复了数个可以卡服、蹦服的BUG(利用旗帜样式堆叠卡服等)。

* 三 – 启动脚本 *

(网页后台可以跳过本段)越多的启动参数反而导致越多的性能损耗。在不了解JVM工作原理的情况下,不要随随便便增加一大堆无用的启动参数。一般情况下指定最小内存、最大内存即可,Java7还需要指定一个大于等于128MB的MaxPermSize。GC回收模式等等参数都应该由JVM自动选择,例如国外论坛流传的使用G1GC可以优化MC性能,的确,G1GC减少了Fullv

GC的时间,但是会额外增加10%~30%的CPU时间占用,完全得不偿失。还有流传很广的设置MaxGCPauseMillis参数。这个参数的含义是控制GC垃圾回收的最大时间。设置一个很小的数值的确从表面来看服务器没有瞬卡的问题了,但是这样会导致每次垃圾回收都不够深入和全面,这样的结果就是服务端运行时间越久越卡,而且很可能出现OOM(内存不够了)直接蹦服。

例如Java7的开服参数可以是(大型插件非常多,MaxPermSize可以设置得更高):

-Xms最小内存 -Xmx最大内存 -XX:MaxPermSize=128M -XX:+AggressiveOpts

-XX:+UseCompressedOops

Java8的参数可以是:

-Xms最小内存 -Xmx最大内存 -XX:+AggressiveOpts -XX:+UseCompressedOops

* -XX:+AggressiveOpts的含义是尽可能的使用更多对性能有帮助的优化功能

* -XX:+UseCompressedOops的含义是指针压缩,可以减少一定的内存占用(64位才支持)

* 四 – 参数的优化 *

不要小瞧参数的修改带来的优化空间,有时候只修改一个参数,就是在线100人TPS19和TPS16的差距。参数的调整分别为server.properties(原版服务器就有),bukkit.yml(水桶服或者衍生版就有),spigot.yml(Spigot或者衍生版就有),paper.yml(PaperSpigot才有)。

* 其中对性能有显著影响的前面为红色的星号,有中等程度影响的为蓝色的星号,没有颜色的星号是建议设置项

server.properties中可以优化性能的参数:

*

view-distance,视距,默认值是10。含义是玩家的视距也就是加载的区块范围,默认是10个区块,视距10加载的区块是视距5的四倍。加载更多的区块则需要更多的内存和运算能力。推荐将这个值设置在5或者6,如果在线人数非常多可以设置为4。降低视距可以有效减少内存的占用,也能有效提高TPS,还可以减少宽带的使用量。这个参数对性能提升是立竿见影的。

*

generate-structures,默认值是true。含义是生成和计算一些特殊的环境,例如女巫塔、村民到达数量生成铁傀儡等等。设置为false可以减少这些特殊环境生成和周期性检查带来的开销。这个参数很少被提起,但是对性能的提升有着不少的帮助。例如我的服务器生存子服有130人左右在线,TPS在17左右,关闭这个功能后提高到了19左右。需要彻底关闭这个参数,还需要在spigot.yml中把save-structure-info设置为false。并且关服后手动删除每个世界(例如world、world_nether、world_the_end)下的data文件夹里的Fortress.dat、Mineshaft.dat、Stronghold.dat、Temple.dat、Village.dat文件。

network-compression-threshold,默认值是256。这个参数只有1.8的服务端才有,含义是网络封包压缩的阀值。例如设置为16,代表封包大于16才被压缩,设置成256代表着封包大于256才被压缩。设置的值越小则会压缩更多的封包,可以使得宽带使用减少,提高网络流畅程度,但是也会增加性能的开销。如果性能够用可以设置为128,使得更多通讯封包被压缩,一定程度上减少宽带使用率又不会带来太多的性能开销。设置的值太小,例如小于等于32会明显增加对性能的开销,不建议这么做。

bukkit.yml中可以优化性能的参数:

*

spawn-limits,意思是限制实体的生成。这个并不是限制一个区块生成多少实体,而是针对一个人可以生成多少实体。例如monsters:颜

70,在线人数只有10个人,则最多只能生成700个怪物实体(僵尸、骷髅、蜘蛛等等),适当的设置这些参数可以减少实体对性能的影响。

*

chunk-gc,控制着区块的回收,单位是Tick(1/20秒),period-in-ticks是指每过多少tick回收一次需要回收的区块,设置的太小会导致回收过于频繁而影响性能,设置的太大会导致需要回收的区块迟迟不回收使得内存占用过大。合理的数值一般是300~400。load-threshold是指达到多少需要回收的区块的时候才进行回收。例如设置成300,只有当需要回收的区块到达300以上才进行回收,合理的设置这个数值可以使得额外只多占用一丁点内存却使得区块回收的性能开销可以被无视。一般设置为300~600比较合适。

autosave,自动保存存档(地图、玩家数据等)的周期,单位是Tick(1/20秒),如果你使用了定时保存的插件,例如Saveit、AutoSave等等,你可以将他设置为0,即关闭这个功能。这样可以减少服务器瞬卡发生的可能。

spigot.yml中可以优化性能的参数:

*

user-cache-size,1.7.5以上版本才有,其控制用户缓存的大小,如果你的服务器玩家很多,可以设置的更大一些,例如5000。

*

save-user-cache-on-stop-only,1.7.5以上版本才有,其含义是是否只在服务器关闭/重启的时候保存用户缓存,设置为true可以提高性能。

* view-distance,同server.properties里的view-distance一样。

*

chunks-per-tick,是指每tick(1/20秒)扫描计算多少区块,计算的内容是作物的生长。默认值是650,可以设置成350来提高性能。极端的情况可以设置成150,但是会使得作物生长的速度明显变慢。

* max-tick-time:

(仅较新的版本有该参数,如1.8.3+)是指每tick,实体和tile最多可以用的时间(单位是毫秒),要明白其含义首先要解释什么是TPS,TPS的意思是每秒有多少tick,最大值是20,也就是每秒tick20次,每次50毫秒。如果运算量过大导致每tick计算了超过了50毫秒,那么TPS就会下降,一旦TPS低于15就会产生明显的卡顿。在这参数中tile代表着熔炉、箱子、牌子、骷髅头等等所能占用的最大时间,entity是指的实体,例如动物、怪物、村民、展示框、掉落物、船、矿车等等。设置tile和entity的总和小于等于30则能明显降低tile和entity对TPS的影响,而服务器运算资源几乎一大半都是由这两者消耗的。设置tile为10,entity为20比较合适,如果实体非常多,还可以设置tile为6,entity为24。

*

anti-xray,服务端自带的反透视功能,俗称假矿。这个功能相比插件版的假矿来说,额外内存占用极少,少到可以忽略,并且矿物的变动计算是异步进行的,对TPS的影响很小。engine-mode为1则是隐藏矿物,engine-mode为2则是将非矿物也伪装成矿物,engine-mode设置为2的效果最好,但是会额外吃一定的性能和宽带,但是engine-mode设置为1无法防御矿追。具体如何权衡请自行决定。如果你不需要本功能,例如你是纯RPG服务器,可以直接把enabled设置为false关闭这个功能,提高性能。

nerf-spawner-mobs,简单来说就是让刷怪笼生成的怪物变成白痴,直观感受就是刷怪笼刷出的怪不能攻击了。默认为false,意思是不开启。设置为true可以获得一定的性能提升。

* entity-activation-range,这个参数是控制实体的活跃范围,例如monsters:

32意思是在玩家附近32格范围内的怪物才会活跃(被计算AI等),减少这个数值可以明显提升性能,但是设置得过小会使得游戏难度大幅降低。一般可以把monsters设置为24,animals设置为12,misc设置为2(misc主要是掉落物,设置2可以使得掉落物几乎不再卡服)。

entity-tracking-range,这个参数是控制实体的可见范围,这个参数不会影响性能,对宽带的影响也极小。不建议修改这个参数,但是适当的降低数值可以减少客户端的卡顿。

*

random-light-updates,随机的光照更新,设置为true的话服务器会随机更新光照,并且在区块加载的第一个tick运算光照逻辑。设置为false可以提高不少性能。

* save-structure-info,在前面已经介绍了。

max-bulk-chunks,1.7.10+才有这个参数,意思是每个数据封包里塞多少个区块。适当提高这个数值,例如从10提高到15可以减少网络卡顿和客户端读取区块的速度,但是设置得过高会导致客户端崩溃。

* max-entity-collisions,实体碰撞箱的阀值。建议设置为2,可以减少密集卡服的问题。

* max-tnt-per-tick,每tick(1/20秒)最多计算多少TNT爆炸,设置为20可以显著防御TNT蹦服。

paper.yml中可以优化性能的参数:

keep-spawn-loaded,spawn区块是否常驻内存,设置为false可以减少一定的内存占用和计算量

* tick-next-tick-list-cap,每tick最大的运算量,减少数值可以提高TPS,例如设置为8000

*

tick-next-tick-list-cap-ignores-redstone,达到上面的运算阀值是否无视红石运算,设置为true可以显著减少红石对服务器性能的影响。

* optimize-explosions,是否开启爆炸算法优化,设置为true可以提升一定的服务器性能

*

use-async-lighting,是否让光照的逻辑运算异步化,设置为true可以使得光照运算不再影响TPS,强烈推荐设置为true

* cache-chunk-maps,是否缓存chunkmaps,可以让区块的数据更多得被复用,可以一定程度提高性能,推荐设置为true

* fast-drain,快速液体流动运算,推荐设置为true,可以减少液体流动运算对服务器性能的影响

* 五 – 优化插件的选择和一些插件建议 *

服务器的主要性能开销在于实体的运算(往往占用了一半的CPU时间),所以定时清理实体(怪物、动物等)和限制密集卡服的插件对性能的帮助是最大的。我在这里厚颜无耻的推荐下自己的插件——NeverLag。

很多插件都支持使用Mysql来存储数据,例如CoreProtect、QucikShop、LWC等等,如果条件允许的话,请使用Mysql来代替文本数据库和Sqlite。这么做可以一定程度的提高服务器的流畅程度。

安装插件的时候也不要太懒使用网页后台现成的插件或者使用论坛上搬运的网盘地址下载。请到bukkit或者spigot官网看看插件有无新版本。举个例子,RPG服常用插件MythicMobs很多服务器还在使用1.*的版本,然而目前最新版本为2.0.6。2.0.0相比1.*就有着不少的性能提升。2.0.5版本相比老版本的改动在于修复bug和大幅提高性能,2.0.6更是使得怪物技能和扫描异步化,明显提高了性能。所以说往往新版本的插件都意味着性能的提升和bug的修复,如果版本兼容,尽可能使用最新稳定版的插件。

* 六 – 玩法也对性能有帮助 *

官方设置一些玩家的聚居点(类似新手村)可以让一部分玩家集中在一起,可以使得加载的区块数量减少(玩家共享了视野),也能减少玩家跑图带来的性能开销。提供公共的刷怪场也能减少玩家自建刷怪场的几率,可以一定程度上使得服务器更为流畅,提供公共的农场饲养动物也有类似的效果。

七 – 找出卡服的真凶

1. 如何使用Timing

Timing是Bukkit和其衍生服务端版本(Spigot、MCPC+、PaperSpigot等)自带的一种性能诊断工具,可以很方便的查看服务端的性能是由那些部分所消耗的,以图表形式还能直观的查看重点性能消耗大户,对于腐竹来说可以很方便的定位卡服的插件或者卡服的原因,对于插件开发者来说可以直接定位到性能不佳的程序方法(Function),方便优化插件性能。为了确保真实性,下面的演示全部在真实的服务器上操作,为了保护玩家隐私和密码安全,已打码处理。

要使用这个功能,首先你需要在服务器内或者直接在后台内输入指令 —— timings on 开启统计,具体如图所示:

为了得到准确的统计结果,建议等待至少15分钟,如果是在瞬间卡顿的峰值附近,建议至少等待5分钟。

在等待足够的时间后,输入指令 —— timings paste 稍等片刻,会生成一串网址,记下这个网址(图片已打码)

现在打开图中的网址,即可查看服务端的『性能分析报告』了。需要注意的时候,不需要使用的时候请使用 timings off

指令关闭性能统计,否则会带来不必要的性能损耗。

2. 如何读懂Timing

首先,我们打开刚刚生成的网址,我们先从基础的信息开始阅读。

Total是指从统计开始一共服务端运行的时间(由Ticks推算),Sample

Time是指统计总时长。后面紧跟着的是服务端的版本信息,例如我的是PaperSpigot1.8.8,Average

Entitys是平均实体的数量,表示形式是 活跃实体数量/总实体数量。一般而言只有活跃实体才会消耗CPU时间。Average

Players是统计时间内平均这个服务端在线的人数(注意,是单个服务端的在线人数),例如我的是105.81人。Average

TPS是统计时段内平均的TPS,例如我的是19.44。Server

Load是指服务端负载水平。超过100%则意味着TPS会开始低于20的水平,一般超过150%就会有明显卡顿了。

未完待续。。

如未注明 , 均为原创丨转载请注明本文来自Minecraft 我的世界服务器优化教程 —— 让多带50%的玩家不再是梦!

由于本站属于分享类网站,故依据CC BY-NC-SA 3.0协议,收集了大量网络资源,如原作者对本站转载的资源不满意的话,可以联系我们进行删除处理,同时本站对原创作品享有相关法律权利。

联系邮箱【admin#mcfuzhu.net】【#换成@】

由于本站自建云盘因欠费400余元(泥萌太热情了)导致云盘在今年6月之前上传的数据全部丢失,目前站长已经把收集到的数据全部上传百度云,如仍有缺失请尽快告知!

喜欢 (38)or分享 (0)

我的世界java版多核优化_Minecraft 我的世界服务器优化教程 —— 让多带50%的玩家不再是梦...相关推荐

  1. minecraft有自带服务器吗,Minecraft服务器优化教程 —— 让多带50%的玩家不再是梦...

    您尚未登录,立即登录享受更好的浏览体验! 您需要 登录 才可以下载或查看,没有帐号?注册(register) x 本帖最后由 jiongjionger 于 2018-8-22 16:11 编辑 * 零 ...

  2. 我的世界java版合成表_我的世界:Java版和基岩版的5个合成表差异,知道半数,老MC无疑。...

    "不要在云了,你这个云玩家!"不知道你没有没有因为某些原因被网友说成是MC的云玩家,我就听到过一个很冤枉的故事.一个已经玩了5年之久的基岩版玩家,被一个玩了一年Java版的玩家硬生 ...

  3. MC指令java,我的世界Java版指令有哪些-我的世界Java版常用指令分享-沧浪手游

    在我的世界中有着很多的指令操作,这些指令可以让玩家在游戏中拥有金手指,就比如下面这些就是Java版的我的世界的指令,具体的代码就让我们一起来看看吧. 我的世界Java版常用指令分享 1./setblo ...

  4. 我的世界java版下载版本_我的世界Java版20w29a

    我的世界Java版20w29a快照版又一次更新了全新的内容了,这款游戏修复了大量的bug让玩家们可以更加流畅在游戏中进行玩耍,其中玩家们可以利用像素方块搭建各种人文建筑哦,感兴趣的玩家们,欢迎前来下载 ...

  5. JAVA20w45a_我的世界java版20W45A快照下载,我的世界java版20W45A最新快照版官方下载 - 游戏盒子下载站...

    最新版本趣味旅程随时开启,广阔的世界带来趣味体验,一幕幕迷人的场景让你能够沉浸其中,全新的互动与冒险玩法随时加入进来,钓鱼寻宝更为有意思哦,各种场景与游戏环境代入感十足,各种不同的游戏元素都可以解锁, ...

  6. 我的世界java版红石电梯_我的世界手机版红石电梯 0.14无活塞红石电梯

    我的世界手机版拥有了更多的红石方块,比如红石中继器.这次4399熊猫为大家带来的是我的世界手机版红石电梯的制作教程.是不需要活塞的红石电梯哦~那么我的世界手机版0.14红石电梯要怎么做呢?就让我们一起 ...

  7. 我的世界java版联机不稳定_我的世界:你一定不会相信,时隔2年,网易这次真的“更新”了...

    说出来你肯定不信,<我的世界>网易的JAVA版本,真的更新到了1.14! 你的第一反应一定是,骗谁呢? 时隔2年,网易终于更新了! ​ 最初我也是看到有人给我留言,开始我是不信的,长达2年 ...

  8. 我的世界Java版最大村庄_我的世界19w11a:详解MC全新村庄机制,我已经准备好重开存档了!...

    已经两周没见到JAVA版的快照了,难道Mojang在憋大招么?没错,本周快照19w11a确实是憋了一个大招! 我的世界19w11a:正式版发布不远了!村庄大改完成,全新交易来袭我的世界19w11a:详 ...

  9. 我的世界java版boat启动器_我的世界boat启动器mio版

    游戏介绍 我的世界boat启动器mio版是一款由玩家自制的我的世界启动器.我的世界boat启动器mio澪版游戏本体使得玩家享受到最经典我的世界游戏的同时,还能够在其中加入各种模组来游玩体验,喜欢的小伙 ...

最新文章

  1. 用windows自带压缩备份mysql_Windows下配合计划任务的Mysql定时压缩备份
  2. 结对编程小项目实现 Python+PyQt5+OOP
  3. 软件工程概论 课堂练习【图书馆系统的类图】
  4. s5pv210——串口(UART)通信实战
  5. 【AI视野·今日CV 计算机视觉论文速览 第187期 part2】Fri, 18 Dec 2020
  6. linux的QQ邮件告警,QQ邮箱告警注意点
  7. 使用RMAN创建复制数据库
  8. python 日志模块封装_Python logging日志模块 封装完善
  9. 把mdb文件导入SQL Server 软件的解决方法
  10. 信息系统项目管理:如何制定项目章程?
  11. AD7705在STM32F103RBT6上的移植[硬件SPI]
  12. python写网络爬虫的环境搭建(windows完整版)
  13. 伦敦银短线交易_MOM指标
  14. openstack 单元测试助手tox
  15. 取消Wince App 应用启动动画和隐藏分区注册表项
  16. Python class __int__容易理解
  17. U深度U盘启动不了Thinkpad X250怎么办?
  18. 关于Android Studio项目开发的感想
  19. Synology NAS多媒体(Photo Station管理照片)
  20. HDU 3234 Exclusive-OR(并查集)

热门文章

  1. 大数据采集方法有哪些
  2. 反射一、反射的基本概念
  3. Java 关于中文乱码问题的解决方案与经验(转)
  4. 关于 do ....while() 的重要用法
  5. 努力和天赋哪个更重要
  6. Nvidia PhysX 学习文档7:Geometry
  7. excel自动排班表_Excel数据分析-如何制作自动更新的数据透视表
  8. 永不言弃,希望就在前方
  9. 网站服务器部署apk软件,供外网下载
  10. C++:map.insert插入重复键(已存在键)将忽略,而非值覆盖