From 9c254e23346419935da51b7b768dffa338de2824 Mon Sep 17 00:00:00 2001 From: Radiation_pi Date: Wed, 12 Jun 2024 23:59:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E9=83=A8=E5=88=86?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=92=8C=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/maintenance/anti-cheat/antixray.md | 241 +++++++++--------- docs/maintenance/optimize/ask-for-help.md | 22 +- docs/maintenance/optimize/config.md | 12 +- docs/maintenance/optimize/jvm-optimization.md | 55 ++-- docs/maintenance/optimize/overview.md | 42 ++- .../optimize/parameter-adjustment/misc.md | 6 + .../network-optimization.md | 38 ++- .../performance-optimization.md | 63 ++++- 8 files changed, 291 insertions(+), 188 deletions(-) create mode 100644 docs/maintenance/optimize/parameter-adjustment/misc.md diff --git a/docs/maintenance/anti-cheat/antixray.md b/docs/maintenance/anti-cheat/antixray.md index f1dbfc582..a043ceee1 100644 --- a/docs/maintenance/anti-cheat/antixray.md +++ b/docs/maintenance/anti-cheat/antixray.md @@ -100,104 +100,14 @@ feature-seeds: > 主世界推荐配置 -
- 配置Ⅰ +:::tip -``` -anticheat: - anti-xray: - enabled: true - engine-mode: 3 - hidden-blocks: - - copper_ore - - deepslate_copper_ore - - raw_copper_block - - gold_ore - - deepslate_gold_ore - - iron_ore - - deepslate_iron_ore - - raw_iron_block - - coal_ore - - deepslate_coal_ore - - lapis_ore - - deepslate_lapis_ore - - mossy_cobblestone - - obsidian - - chest - - diamond_ore - - deepslate_diamond_ore - - redstone_ore - - deepslate_redstone_ore - - clay - - emerald_ore - - deepslate_emerald_ore - - ender_chest - lava-obscures: false - max-block-height: 128 - replacement-blocks: - - amethyst_block - - andesite - - budding_amethyst - - calcite - - coal_ore - - deepslate_coal_ore - - deepslate - - diorite - - dirt - - emerald_ore - - deepslate_emerald_ore - - granite - - gravel - - oak_planks - - smooth_basalt - - stone - - tuff - update-radius: 2 - use-permission: false -``` -![test](_images/anticheat/antixray-mode3-1.png) -
+如果使用了 Raytraceantixray 请务必使用配置 Ⅲ 。 + +:::
- 配置Ⅱ - -``` -anticheat: - anti-xray: - enabled: true - engine-mode: 1 - hidden-blocks: - - chest - - coal_ore - - deepslate_coal_ore - - copper_ore - - deepslate_copper_ore - - raw_copper_block - - diamond_ore - - deepslate_diamond_ore - - emerald_ore - - deepslate_emerald_ore - - gold_ore - - deepslate_gold_ore - - iron_ore - - deepslate_iron_ore - - raw_iron_block - - lapis_ore - - deepslate_lapis_ore - - redstone_ore - - deepslate_redstone_ore - lava-obscures: false - max-block-height: 64 - replacement-blocks: [] - update-radius: 2 - use-permission: false - -``` -![test](_images/anticheat/antixray-mode1-1.png) -
- -
- 配置Ⅲ-*推荐使用* + 配置 Ⅰ - *带宽消耗较大,效果非常好* ``` anticheat: @@ -255,6 +165,102 @@ anticheat: ![test](_images/anticheat/antixray-mode2-1.png)
+
+ 配置Ⅱ - *带宽消耗中等,效果中等 + +``` +anticheat: + anti-xray: + enabled: true + engine-mode: 3 + hidden-blocks: + - copper_ore + - deepslate_copper_ore + - raw_copper_block + - gold_ore + - deepslate_gold_ore + - iron_ore + - deepslate_iron_ore + - raw_iron_block + - coal_ore + - deepslate_coal_ore + - lapis_ore + - deepslate_lapis_ore + - mossy_cobblestone + - obsidian + - chest + - diamond_ore + - deepslate_diamond_ore + - redstone_ore + - deepslate_redstone_ore + - clay + - emerald_ore + - deepslate_emerald_ore + - ender_chest + lava-obscures: false + max-block-height: 128 + replacement-blocks: + - amethyst_block + - andesite + - budding_amethyst + - calcite + - coal_ore + - deepslate_coal_ore + - deepslate + - diorite + - dirt + - emerald_ore + - deepslate_emerald_ore + - granite + - gravel + - oak_planks + - smooth_basalt + - stone + - tuff + update-radius: 2 + use-permission: false +``` +![test](_images/anticheat/antixray-mode3-1.png) +
+ +
+ 配置Ⅲ - *降低带宽消耗,效果较差* + +``` +anticheat: + anti-xray: + enabled: true + engine-mode: 1 + hidden-blocks: + - chest + - coal_ore + - deepslate_coal_ore + - copper_ore + - deepslate_copper_ore + - raw_copper_block + - diamond_ore + - deepslate_diamond_ore + - emerald_ore + - deepslate_emerald_ore + - gold_ore + - deepslate_gold_ore + - iron_ore + - deepslate_iron_ore + - raw_iron_block + - lapis_ore + - deepslate_lapis_ore + - redstone_ore + - deepslate_redstone_ore + lava-obscures: false + max-block-height: 64 + replacement-blocks: [] + update-radius: 2 + use-permission: false + +``` +![test](_images/anticheat/antixray-mode1-1.png) +
+ --- 如何在下界使用其他的 Anti-Xray 配置呢?找到 `/world_nether/paper-world.yml` @@ -262,7 +268,7 @@ anticheat: 将下列你喜欢的配置进行复制粘贴即可
- 下界配置Ⅰ + 下界配置 Ⅰ - *带宽压力翻倍,效果好,客户端 FPS 可能下降* ``` anticheat: @@ -296,7 +302,7 @@ anticheat:
- 下界配置Ⅱ + 下界配置 Ⅱ - *带宽占用略微降低,效果一般(但下届合金一定会被隐藏)* ``` anticheat: @@ -320,7 +326,7 @@ anticheat:
- 下界配置Ⅲ + 下界配置 Ⅲ - *带宽占用较大提升,效果较好* ``` anticheat: @@ -353,53 +359,36 @@ anticheat:
-这边推荐使用**下界配置Ⅰ** - -那么终末地配置呢? - -我们推荐在终末地地图不使用假矿 - -所以world_the_end/paper.world.yml的配置 - -我们的推荐如下 +在末地由于没有矿物,我们推荐将 `world_the_end/paper.world.yml` 进行以下配置即可。 ``` - anticheat: anti-xray: enabled: false - - ``` 注意,如果你需要隐藏暴露在空气中的方块,需要将 `air` 添加到 `hidden-blocks` 和 `replacement-blocks` ,但这非常影响性能,不推荐。 +:::info ---- +将配置文件复制到对应 yml 文件中时,如果已经存在,请相应的进行覆盖而不是简单复制到最后。 -至此,这就是你不用插件就能做到反矿物透视的所有事 +如果并不存在类似的文本,那么请直接复制到对应世界 yml 中。 + +::: ### Anti-xray 插件 -#### RayTraceAntiXray(非常推荐) +[RayTraceAntiXray](https://builtbybit.com/resources/raytraceantixray.24914/),[开源](https://github.com/stonar96/RayTraceAntiXray)付费且仅售 7 美元。 -[下载链接(7 美元)](https://builtbybit.com/resources/raytraceantixray.24914/) +是一款用于隐藏 paper 服务器中使用 `engine-mode: 1` 时暴露在空气中的未隐藏方块的插件。 -用于服务器端异步多线程光线追踪的 Paper 插件,使用 Paper Anti-Xray 引擎模式 1 隐藏暴露在空气中的矿石。 +其使用了异步多线程光线追踪,判断玩家是否能看到目标方块,从而在玩家能够看到目标方块时发送真实方块信息。 -可以优化自带的Anti-Xray,减小服务器的负担。项目是开源的,也可[自行构建](https://github.com/stonar96/RayTraceAntiXray) - -#### RaytraceAntiXray(20欧元)(推荐) - -[下载链接(20 欧元)](https://builtbybit.com/resources/raytraceantixray-ores-entities-tiles.41896/) - -插件特色 -* 支持版本极广(1.8-最新)(1.13.2之前可是连raytrace方法都没) -* 支持实体隐藏 -* 支持奖励箱,刷怪笼之类的隐藏 +可以优化自带的 Anti-Xray ,减小服务器的带宽开销,如需构建请自行构建。 :::warning -在使用 Paper 及其 Fork 时。请停止使用[Orebfuscator](https://modrinth.com/plugin/orebfuscator)等假矿插件。换用 Paper 自带的 Anti-Xray。 +在使用 Paper 及其 Fork 时。请停止使用 [Orebfuscator](https://modrinth.com/plugin/orebfuscator) 等假矿插件。换用 Paper 自带的 Anti-Xray。 ::: \ No newline at end of file diff --git a/docs/maintenance/optimize/ask-for-help.md b/docs/maintenance/optimize/ask-for-help.md index 0197c297e..3fd491767 100644 --- a/docs/maintenance/optimize/ask-for-help.md +++ b/docs/maintenance/optimize/ask-for-help.md @@ -1,32 +1,32 @@ --- -title: 怎么让大佬帮我 +title: 怎么让大佬帮我性能分析 sidebar_position: 7 --- -# 怎么让大佬帮我 +# 怎么让大佬帮我性能分析 -1. 检查你的服务器有没有安装Spark插件, 尝试`/spark`命令或者`/pl`看看有没有Spark +1. 检查你的服务器有没有安装 Spark 插件, 尝试 `/spark` 命令或者 `/pl` 看看有没有 Spark -如果没有, 手动安装一下[Spark](performance-analysis.md) +如果没有,手动安装一下 [Spark](performance-analysis.md) -2. 开启Spark记录 +2. 开启 Spark 记录 ``` -spark profiler start +/spark profiler start ``` ![](_images/怎么让大佬帮我/spark_start.png) -在你服务器卡顿的时候开启, **一段时间后**结束它 +在你服务器卡顿的时候开启, **一段时间后** 结束它 -3. 结束Spark记录 +3. 结束 Spark 记录 ``` -spark profiler stop +/spark profiler stop ``` -它会给你一个链接, 你把这个链接发给大佬并**礼貌的**请求他帮助你 +它会给你一个链接,你把这个链接发给大佬并 **礼貌的** 请求帮助你 -注:链接位置在下方图片中红框标记的部分 +注:链接位置在下图中红框标记的部分 ![](_images/怎么让大佬帮我/spark_stop.png) diff --git a/docs/maintenance/optimize/config.md b/docs/maintenance/optimize/config.md index bbc78f9b9..fb7609e2a 100644 --- a/docs/maintenance/optimize/config.md +++ b/docs/maintenance/optimize/config.md @@ -5,9 +5,11 @@ sidebar_position: 3 # 调服务端配置 -没有适用于所有服务器的设置. 您应该理解每个配置选项,并根据服务器的最佳参数与服务器硬件、玩家数量和服务器性质等调整参数. 所以参数因服而异. +没有适用于所有服务器的设置. 您应该理解每个配置选项,并根据服务器的最佳参数与服务器硬件、玩家数量和服务器性质等调整参数. -随着进入游戏后期,服务器工作量会随着机器或者玩家增加而逐渐增加,因此服务器优化不是一次性的任务,而是持续的努力. +所以参数因服而异,随着进入游戏后期,服务器工作量会随着机器或者玩家增加而逐渐增加, + +因此服务器优化不是一次性的任务,而是持续的努力. 准备好你的脑子,以下的推荐参数仅作为参考,具体数字请自行尝试: @@ -34,7 +36,9 @@ sidebar_position: 3 ::: -# 可爱的Paper酱 +
+ +# 可爱的 Paper 酱 ![](https://paper-chan.moe/content/images/2022/09/Paper-Chan-Banner-2022-Standard-3.jpg) @@ -49,3 +53,5 @@ sidebar_position: 3 ![](https://paper-chan.moe/content/images/2023/03/paperfoliaAPNG.png) ![](https://paper-chan.moe/content/images/2023/05/Paper-Canvas-with-Folia-v5.png) + +
diff --git a/docs/maintenance/optimize/jvm-optimization.md b/docs/maintenance/optimize/jvm-optimization.md index 52cdaf38b..9facf3153 100644 --- a/docs/maintenance/optimize/jvm-optimization.md +++ b/docs/maintenance/optimize/jvm-optimization.md @@ -7,40 +7,39 @@ sidebar_position: 7 ## 参数 -以下是编写完成的JVM优化参数(至少Java 17 以上) +以下是推荐的 JVM 优化参数(至少 Java 17 以上) **以下启动参数需要自己补全内存分配(-Xms和-Xmx) 和 服务端核心名(-jar 服务端名字.jar)**
- Mukul1127 Flag (ZGC)(推荐) + Mukul1127 Flag Plus - 4 核 8G 以上推荐 -Mukul1127 Flag Plus是现代的启动参数,使用ZGC作为垃圾回收,**注意:Mukul1127 Flag Plus至少需要4c8g以上环境才可以发挥出优势,4c8g一下请使用aikar flag plus**,Mukul1127 Flag Plus需要Java17以上! +Mukul1127 Flag Plus 是现代的启动参数,使用 ZGC 作为垃圾回收,**注意:Mukul1127 Flag Plus至少需要4c8g以上环境才可以发挥出优势,更低配置请使用 Aikar flag plus**,Mukul1127 Flag Plus 需要 Java 17 以上! ```shell java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseFMA -XX:+UseVectorCmov -XX:+UseNewLongLShift -XX:+UseFastStosb -XX:+SegmentedCodeCache -XX:+OptimizeStringConcat -XX:+DoEscapeAnalysis -XX:+OmitStackTraceInFastThrow -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:+UseZGC -XX:AllocatePrefetchStyle=1 -XX:-ZProactive ``` -如果你使用Java 21 以上,你可以将`-XX:-ZProactive`换`-XX:+ZGenerational`,Java 22以上必须切换 +如果你使用Java 21 以上,你可以将`-XX:-ZProactive`换`-XX:+ZGenerational`,Java 22以上必须切换
- Mukul1127 Flag (ZGC)(GraalVM版本)(推荐) - -GraalVM Java 17+ 的参数, + Mukul1127 Flag - 使用 GraalVM 时推荐 +GraalVM Java 17+ 的参数, ```shell java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseFMA -XX:+UseVectorCmov -XX:+UseNewLongLShift -XX:+UseFastStosb -XX:+SegmentedCodeCache -XX:+OptimizeStringConcat -XX:+DoEscapeAnalysis -XX:+OmitStackTraceInFastThrow -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:AllocatePrefetchStyle=3 -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:+EagerJVMCI -Dgraal.TuneInlinerExploration=1 -XX:+UseZGC -XX:AllocatePrefetchStyle=1 -XX:-ZProactive ``` -如果你使用Java 21 以上,你可以将`-XX:-ZProactive`换`-XX:+ZGenerational`,Java 22以上必须切换 +如果你使用Java 21 以上,你可以将`-XX:-ZProactive`换`-XX:+ZGenerational`,Java 22以上必须切换 ### 以下是格外选项 -更激进的内联,在 Graal 中通过`-Dgraal.BaseTargetSpending=160`(默认为 120)和 OpenJDK 中的其他一些标志。具有较大缓存的 CPU 可能会从中受益。 +更激进的内联,在 Graal 中通过 `-Dgraal.BaseTargetSpending=160` (默认为 120)和 OpenJDK 中的其他一些标志。具有较大缓存的 CPU 可能会从中受益。 -`-Dgraal.OptWriteMotion=true`和`-Dgraal.WriteableCodeCache=true`,它们看起来不稳定,但在 GraalVM 22.3.0+ 中可能更稳定 +`-Dgraal.OptWriteMotion=true` 和 `-Dgraal.WriteableCodeCache=true` ,它们看起来不稳定,但在 GraalVM 22.3.0+ 中可能更稳定
@@ -49,7 +48,7 @@ java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseFMA ```shell -java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseFMA -XX:+UseVectorCmov -XX:+UseNewLongLShift -XX:+UseFastStosb -XX:+SegmentedCodeCache -XX:+OptimizeStringConcat -XX:+DoEscapeAnalysis -XX:+OmitStackTraceInFastThrow -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:AllocatePrefetchStyle=3 -XX:+UseG1GC -XX:MaxGCPauseMillis=37 -XX:+PerfDisableSharedMem -XX:G1HeapRegionSize=16M -XX:G1NewSizePercent=23 -XX:G1ReservePercent=20 -XX:SurvivorRatio=32 -XX:G1MixedGCCountTarget=3 -XX:G1HeapWastePercent=20 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5.0 -XX:GCTimeRatio=99 -XX:G1ConcRefinementServiceIntervalMillis=150 -XX:G1ConcRSHotCardLimit=16 +java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+UseFMA -XX:+UseVectorCmov -XX:+UseNewLongLShift -XX:+UseFastStosb -XX:+SegmentedCodeCache -XX:+OptimizeStringConcat -XX:+DoEscapeAnalysis -XX:+OmitStackTraceInFastThrow -XX:+AlwaysActAsServerClassMachine -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:NmethodSweepActivity=1 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:+UseVectorCmov -XX:+PerfDisableSharedMem -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:ThreadPriorityPolicy=1 -XX:AllocatePrefetchStyle=3 -XX:+UseG1GC -XX:MaxGCPauseMillis=37 -XX:+PerfDisableSharedMem -XX:G1HeapRegionSize=16M -XX:G1NewSizePercent=23 -XX:G1ReservePercent=20 -XX:SurvivorRatio=32 -XX:G1MixedGCCountTarget=3 -XX:G1HeapWastePercent=20 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:MaxTenuringThreshold=1 -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5.0 -XX:GCTimeRatio=99 -XX:G1ConcRefinementServiceIntervalMillis=150 -XX:G1ConcRSHotCardLimit=16 ``` @@ -67,35 +66,51 @@ java -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+Unlo ### 内存优化 -如果服务器内存足够,可以加上此参数`-XX:-ZUncommit`,要求Jvm总是提前把要用的内存申请好,并且阻止Jvm把临时空出来的内存还给系统 +如果服务器内存足够,可以加上此参数 `-XX:-ZUncommit` ,要求 JVM 总是提前把要用的内存申请好, + +并且阻止 JVM 把临时空出来的内存还给系统。这会加快短时间有大量内存的需求时的速度。 ### 大页支持 -当然,在动手前,让我们先试一试是不是系统已经支持了这项功能 ,在控制台执行此命令 +当然,在动手前,让我们先试一试是不是系统已经支持了这项功能 ,在控制台执行此命令 ```shell java -Xlog:gc+init -XX:+UseLargePages -Xmx1g -version ``` -如果你像我一样, 有一行 `UseLargePages disabled, no large pages configured and available on the system. `那么就说明当前系统并不支持大页,不过不要急,可以试一下这一行命令 `java -Xlog:gc+init -XX:+UseTransparentHugePages -Xmx1g -version` ,如果看到`Large Page Support: Enabled (Transparent)`,表示你的系统支持透明大页 +如果出现了以下字样,那么说明不完全兼容: -但是如果你依然不支持或者想要追求极致性能,可以去百度搜索当前的系统如何开启大页,这里就不再过多的赘述了。(LargePages对服务器提升相当巨大) +``` +UseLargePages disabled, no large pages configured and available on the system. +``` -如果支持LargePages,加上此参数`-XX:+UseLargePages -XX:LargePageSizeInBytes=2m -XX:+UseHugeTLBFS` +那么就说明当前系统并不支持大页,不过不要急,可以试一下这一行命令: -如果支持TransparentHugePages(不要把两个都加上,优先LargePages),加上此参数`-XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2m -XX:+UseHugeTLBFS` +``` +java -Xlog:gc+init -XX:+UseTransparentHugePages -Xmx1g -version +``` + +如果看到 `Large Page Support: Enabled (Transparent)` ,表示你的系统支持透明大页 + +但是如果你依然不支持或者想要追求极致性能,可以去百度搜索当前的系统如何开启大页, + +这里就不再过多的赘述了。(LargePages对服务器提升相当巨大) + +如果支持 LargePages ,加上此参数 `-XX:+UseLargePages -XX:LargePageSizeInBytes=2m -XX:+UseHugeTLBFS` + +如果支持 TransparentHugePages (不要把两个都加上,优先LargePages),加上此参数 `-XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2m -XX:+UseHugeTLBFS` ### SIMD -如果你使用的是Pufferfish的分支(Purpur,Leaf,Leaves,Gale),你可以添加此参数`--add-modules=jdk.incubator.vector` +如果你使用的是 Pufferfish 的分支(Purpur,Leaf,Leaves,Gale),你可以添加此参数 `--add-modules=jdk.incubator.vector` ### 下载源加速 -默认的SpigotLibraryLoader下载源在国内访问很慢,如果你使用的是Leaf,你可以添加`-DLeaf.library-download-repo=https://maven.aliyun.com/repository/public`参数启动国内下载源 +默认的 SpigotLibraryLoader 下载源在国内访问很慢,如果你使用的是Leaf,你可以添加 `-DLeaf.library-download-repo=https://maven.aliyun.com/repository/public` 参数启动国内下载源 ## 参数解释 -TODO +TODO ## JDK diff --git a/docs/maintenance/optimize/overview.md b/docs/maintenance/optimize/overview.md index eb3bf9237..fa398ed69 100644 --- a/docs/maintenance/optimize/overview.md +++ b/docs/maintenance/optimize/overview.md @@ -5,7 +5,7 @@ sidebar_position: 1 # 概览 -优化不是装插件,而是清理服务器的卡顿因素,由于 Minecraft 本身的性能低下、部分插件作者并没有优化代码的意识、服务器实体过多等。 +优化是做减法,清理服务器的卡顿因素,由于 Minecraft 本身的性能低下、部分插件作者并没有优化代码的意识、服务器实体过多等。 每个服务器可能有自己的卡顿原因,在这部分先做最基础的通用优化,如果你使用后作用不大请参考性能分析板块。 @@ -13,11 +13,9 @@ sidebar_position: 1 # 第一步 - Java 优化 -:::info +为什么选择 Java 优化作为第一步 - 几乎任何情况下,服务器都会因为合适的 Java 受益, -几乎任何情况下,所有服务器都会因为选择合适的Java而受益,而这本身是最没有代价的,仅仅需要你下载一个小小的 Java 安装程序,或者更改 JVM 参数(大白话来说就是开服参数)。 - -::: +仅仅需要你下载一个小小的 Java 安装程序,或者更改 JVM 参数(大白话来说就是开服参数)。 ## 选择合适的 Java @@ -25,11 +23,23 @@ sidebar_position: 1 ## JVM 参数优化 -可以在[ JVM 参数生成器](https://startmc.jakaco.xyz/)生成适合你服务器的基本 JVM 参数,然后复制并保存到你的启动脚本里,然后重启就完成了 +可以在 [JVM 参数生成器](https://startmc.jakaco.xyz/)生成适合你服务器的基本 JVM 参数,然后复制并保存到你的启动脚本里,然后重启就完成了 别急,还有一些更高阶的参数。[拓展阅读](https://blog.binklac.com/e6ad4dc21152) -# 第二步 - 更换核心 +# 第二步 - 预生成 + +什么是预生成 - 预生成就是让服务器在玩家进入之前,预先生成区块对应方块、结构等。 + +在 Minecraft 服务器中,生成新区块会消耗大量服务器资源,如果要开启新的地图 / 服务器,建议先预生成地图。 + +[Chunky](https://hangar.papermc.io/pop4959/Chunky) 是最常用的预生成插件,通常与 [ChunkyBorder](https://modrinth.com/plugin/chunkyborder) 结合使用,你可以根据自己的喜好自定义边界及形状。 + +通常来说,即使你不设置边界,也务必进行预生成大约 1w x 1w 大小的世界。这对降低后期服务器负载很有效。 + +预生成时应该注意,默认情况 1.20 原版 1w x 1w 的地图需要 4-5 GB 硬盘。应根据硬盘大小选择世界的预生成大小。 + +# 第三步 - 更换核心 在插件和配置层面能进行的优化其实不多(受限于 API 还有服务端核心),所以最好的方法是更换服务器核心。 @@ -62,13 +72,13 @@ sidebar_position: 1 -# 第三步 - 优化服务端配置 +# 第四步 - 调整服务端配置 目前,Bilibili上面的配置都是很老的,不推荐使用 文档里的 [调服务端配置](config.md) 比较新,非常推荐 -# 第四步 - 更换硬件 +# 第五步 - 更换硬件 **不要无脑换硬件!** 首先要知道自己的硬件瓶颈在哪里。如果 CPU 负荷过高,建议先排除 CPU 异常占用,再看 CPU 总体占用情况。一般来说服务器卡顿换 CPU 是最有效的,单核性能和 MC 服务器 TPS 几乎呈线性相关,但是换 CPU 几乎就相当于要换一台机器,迁移对于新手来说并不是易事。 @@ -80,15 +90,21 @@ sidebar_position: 1 如果发现 CPU 占用和内存占用都不是很高但是服务器卡卡的,请考虑是不是服务器带宽受限导致玩家 ping 值突然升高的问题。请分清楚 TPS 低导致的卡顿,MSPT高导致的卡顿,带宽占满导致的卡顿。 ::: -# 第五步 - 更换操作系统 +# 第六步 - 更换操作系统 无论在性能还是稳定性, Linux 都比 Windows 更适合用于开服,对于 Linux 根据自己的使用经验选择即可,如果没有使用经验可以先使用 Ubuntu 等主流系统。 -如果想要了解更多请前往进阶[Linux开服教程](/docs/sundry/advance/Linux/tutorial.md) +如果想要了解更多请前往进阶 [Linux 开服教程](/docs/sundry/advance/Linux/tutorial.md) -# 第六步 - 性能分析 -通用的一些解决方法看来已经差不多做好了,每个服务器都有自己最导致滞后的因素,可能是实体太多,可能是玩家机器多,也可能是某些插件写的太屎... 如此,那么应该如何知道服务器为何卡顿呢?对咯! 性能分析! +# 第七步 - 性能分析 + +**“马克思主义活的灵魂在于对具体问题作具体分析。” - 列宁** + +通用优化已经差不多做好了,而每个服都有自己导致滞后的因素,可能是实体太多,可能是玩家机器多,也可能是某些插件写的太屎... + +如此,那么应该如何知道服务器为何卡顿呢? 如果你是个完完全全的新手,或者懒得分析,想请教别人分析应该怎么办呢? 请转跳到 [怎么让大佬帮我](ask-for-help.md) + 如果你不想求助别人,亦或者你想有一些进步,请参考 [性能分析](performance-analysis.md) \ No newline at end of file diff --git a/docs/maintenance/optimize/parameter-adjustment/misc.md b/docs/maintenance/optimize/parameter-adjustment/misc.md new file mode 100644 index 000000000..f4cf5c7bc --- /dev/null +++ b/docs/maintenance/optimize/parameter-adjustment/misc.md @@ -0,0 +1,6 @@ +--- +title: 杂项优化 +sidebar_position: 3 +--- + +TODO \ No newline at end of file diff --git a/docs/maintenance/optimize/parameter-adjustment/network-optimization.md b/docs/maintenance/optimize/parameter-adjustment/network-optimization.md index 64db9543f..e0ccb2eec 100644 --- a/docs/maintenance/optimize/parameter-adjustment/network-optimization.md +++ b/docs/maintenance/optimize/parameter-adjustment/network-optimization.md @@ -1,6 +1,6 @@ --- title: 网络优化 -sidebar_position: 7 +sidebar_position: 2 --- # 网络优化 @@ -17,13 +17,14 @@ sidebar_position: 7 ### 手动调整 -在 spigot.yml 中可以设置服务器的视野距离 +在 `spigot.yml` 中可以设置服务器的视野距离 ``` -view-distance: 8 #视野距离为 8 chunks +view-distance: 8 +#视野距离为 8 chunks ``` -如果你使用的默认 10 chunks 的视野距离,可能对于带宽来说有一定的压力,可以酌情减少, +如果你使用的默认 10 chunks 的视野距离,可能对于带宽来说有一定的压力,可以酌情减少,建议为 4 - 12。 ### 自动调整 @@ -31,7 +32,7 @@ view-distance: 8 #视野距离为 8 chunks ## 降低区块加载速度 -在 /config/paper-global.yml 中有关于区块生成的一些参数 +在 `/config/paper-global.yml` 中有关于区块生成的一些参数 ``` chunk-loading-basic: @@ -44,7 +45,7 @@ chunk-loading-basic: #服务器发送给单个玩家的最大速率。设置为-1 则禁用。 ``` -其中 player-max-chunk-send-rate 对应服务器每秒钟最多向玩家发送多少区块包,设置得越低玩家收到完整的地图信息越慢, +其中 `player-max-chunk-send-rate` 对应服务器每秒钟最多向玩家发送多少区块包,设置得越低玩家收到完整的地图信息越慢, 服务器虽然总是会发送几乎同样多的区块信息,但由于发送速度降低,这会降低上行带宽的最大占用率,从而避免大量跑图导致的顿卡。 @@ -52,28 +53,22 @@ chunk-loading-basic: Minecraft 服务端会将每个实体的行为实时发送给附近的玩家客户端,这个包通常来说占用是很少的,但是大量玩家处于实体密集型区域时将出现大量带宽占用。 -bukkit.yml 以及 config/paper-world-default.yml 中对于 spawn-limits 做了限制(若二者均有值时取 Paper 的,若 Paper 中为 -1 时取 Bukkit) +bukkit.yml 以及 `config/paper-world-default.yml` 中对于 `spawn-limits` 做了限制(若二者均有值时取 Paper 的,若 Paper 中为 -1 时取 Bukkit) ``` spawn-limits: monsters: 70 #怪物包括 远古守卫者、末影人、监守者、蠹虫、猪灵蛮兵、流浪者、幻术师、骷髅、潜影贝、僵尸疣猪兽、守卫者、岩浆怪、僵尸村民、僵尸猪灵、卫道士、幻翼、猪灵、史莱姆、末影龙、溺尸、掠夺者、唤魔者、僵尸、蜘蛛、尸壳、恶魂、劫掠兽、疣猪兽、洞穴蜘蛛、女巫、枯萎、末影螨、凋灵骷髅、烈焰人、巨人、爬行者、恼鬼。 - animals: 10 #动物包括 猪、北极熊、狐狸、猫、僵尸马、嗅探者、熊猫、兔子、狼、牛、海龟、青蛙、悦灵、行商羊驼、驴、蜜蜂、骆驼、绵羊、蝌蚪、豹猫、鸡、哞菇、马、羊驼、流浪商人、鹦鹉、山羊、骡、骷髅马刷、炽足兽. - water-animals: 5 # 包括鱿鱼和海豚 - water-ambient: 20 # 包括鳕鱼、河豚、鲑鱼、热带鱼 - water-underground-creature: 5 # 包括发光鱿鱼 - axolotls: 5 # 美西螈 - ambient: 15 # 只包括蝙蝠,建议0 @@ -96,8 +91,23 @@ entity-tracking-range: ## 选择更加合理的 AntiXray(反矿物透视)方式 +:::warning + 停止使用 [Orebfuscator](https://modrinth.com/plugin/orebfuscator) 等矿物混淆插件,使用 Paper 自带的矿物混淆。 使用 Paper 矿物混淆时候,尽量不要在非主世界开启 mode 2 或 mode 3 -***TODO*** +::: + +参考文档内关于[反矿物透视](/docs/maintenance/anti-cheat/antixray.md)中标明能降低带宽占用的配置。 + +## 其他插件 + +常见的对带宽可能有一定占用的插件行为有: + +* 某些 TAB / 计分板 / bossbar / actionbar 类插件时高频刷新 +* 某些写的特别烂的反作弊插件可能会每 tick 都向玩家发送数据包 +* 某些 **装饰类** 插件大量基于粒子效果或盔甲架的数据包发送 +* 欢迎补充 + +请适当使用使用以上类型的插件。使用时也尽量控制盔甲架、粒子效果等的量。 \ No newline at end of file diff --git a/docs/maintenance/optimize/parameter-adjustment/performance-optimization.md b/docs/maintenance/optimize/parameter-adjustment/performance-optimization.md index cb6e073b3..31b772138 100644 --- a/docs/maintenance/optimize/parameter-adjustment/performance-optimization.md +++ b/docs/maintenance/optimize/parameter-adjustment/performance-optimization.md @@ -1,3 +1,64 @@ --- -title: 参数优化 +title: 性能优化 +sidebar_position: 1 --- + +# 性能优化 + +性能优化主要是针对低 TPS 和高 MPST 导致的服务器顿卡或长期不流畅。 + +## 降低服务器模拟距离(即 Simulate distance) + +:::tip + +在此之前,你必须了解的是模拟距离(Simulate distance)和视野距离(View distance)区别(下文用 SDT和 VDT 分别指代)。 + +模拟距离指的是玩家在这个范围内的游戏行为正常进行,如动物、怪物等 AI 的寻路,生物生成,草地扩散,水流流动等。 + +视野距离指的是服务器将发送给玩家的区块的数据包的距离,在这个范围内,游戏行为不一定会继续发生(这取决于 SDT) + +当玩家移动导致一个区域不在玩家的 SDT 中而又在 VDT 中,那么服务器只会读取这个区域的方块信息并发送给玩家。 + +而不会对这个区域进行加载。这是各种游戏常见的处理方式,弱化远处的计算能够使得服务器更加流畅。 + +::: + +### 手动调整 + +在 `spigot.yml` 中可以设置服务器的模拟距离: + +``` +simulate-distance: 8 +#模拟距离为 8 chunks +``` + +如果你使用的默认 10 chunks 的模拟距离,这会非常影响性能,可以酌情减少,建议为 3 - 8。 + +### 自动调整 + +安装 [View Distance Tweaks](https://www.spigotmc.org/resources/view-distance-tweaks.75164/) 实现自动调整视野距离使得玩家增多时自动减少视野,玩家减少时自动增加视野。 + +## 降低区块生成速度 + +希望你服务器进行了预生成,如果没有进行的话请阅读 [优化概论](overview.md) + +在 `/config/paper-global.yml` 中有关于区块生成的一些参数 + +``` +chunk-loading-basic: + #注:以下的单位均为 chunks / seconds + player-max-chunk-generate-rate: -1.0 + #为每个玩家生成分块的最大速率,设置为-1 则禁用。 + player-max-chunk-load-rate: 100 + #任何单个播放器加载块的最大速率,设置为-1 则禁用。 + player-max-chunk-send-rate: 75 + #服务器发送给单个玩家的最大速率。设置为-1 则禁用。 +``` + +其中 `player-max-chunk-generate-rate` 对应服务器每秒钟最多为玩家生成多少区块,设置得越低区块生成越慢。 + +此时大量跑图的玩家可能会觉得服务器有一些滞后,但是能够保证大多数玩家的游戏体验,这是值得的。 + +将 `player-max-chunk-generate-rate` 设置为 20 - 40 应该是合理的值。 + +TODO \ No newline at end of file