From c68a7c75877b9bb921df9b3c4873433eca42d951 Mon Sep 17 00:00:00 2001 From: Radiation_pi Date: Sun, 2 Jun 2024 13:11:52 +0800 Subject: [PATCH] =?UTF-8?q?JVM=E5=8F=82=E6=95=B0=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=EF=BC=8C=E6=A0=BC=E5=BC=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/优化/JVM参数优化.md | 53 +++++++++ docs/{正式开服 => 准备工作}/_images/nogui.jpg | Bin docs/准备工作/基础知识/什么是启动脚本.md | 104 ++++------------- .../基础知识/{服务端架构.md => 什么是服务端.md} | 45 +++++++- docs/正式开服/开启服务端.md | 105 +++++------------- 5 files changed, 140 insertions(+), 167 deletions(-) create mode 100644 docs/优化/JVM参数优化.md rename docs/{正式开服 => 准备工作}/_images/nogui.jpg (100%) rename docs/准备工作/基础知识/{服务端架构.md => 什么是服务端.md} (71%) diff --git a/docs/优化/JVM参数优化.md b/docs/优化/JVM参数优化.md new file mode 100644 index 0000000000..76fc86eb63 --- /dev/null +++ b/docs/优化/JVM参数优化.md @@ -0,0 +1,53 @@ +--- +sidebar_position: 7 +--- + +# JVM 参数优化 + +## 性能相关配置 + +我们这里使用的内存回收器为 `G1 (Garbage First)` ,所以我们要在启动参数中加上 `-XX:+UseG1GC` ,这样我们就能使用该回收器了 + +光设置使用该回收器也不行,还要对他进行一些配置,下面就会对配置参数进行讲解,你并不需要完全了解下面参数的意义与说明,可以跟着我的推荐值进行设置。 + +### G1GC 各种参数的说明: + +如果你是新手,或暂时没有性能问题,或者只是不感兴趣,这部分可以不看,但如果你感兴趣的话... + +
+ 这里有适合好奇宝宝的完整说明 + +| 参数 | 说明 | +| :--------------------------------- | :----------------------------------------------------------- | +| -XX:+UseG1GC | 使用 G1 GC。 | +| -XX:G1NewSizePercent | 设置新生代区域大小。由于 Minecraft 拥有大量短期对象,所以需要更多新生代空间,而新一代太小会导致服务器顿卡。 | +| -XX:G1MaxNewSizePercent | 设置最大新生代区域大小。 | +| -XX:MaxGCPauseMillis | 设置一个 GC 暂停时间期望目标,这是一个非硬性目标,JVM 会尽可能的保证这个目标。 | +| -XX:G1HeapWastePercent | 当堆中有超过这个百分比的内存是空闲或可回收的,它会触发一次 Mixed GC,从而尽量避免 Full GC。 | +| -XX:InitiatingHeapOccupancyPercent | 设置了开始 Mixed GC 时堆的占用率阈值,默认为 45%, 降低该值可以更早地开始回收老年代空间,避免老年代快速增长导致较长的 GC 停顿。 | +| -XX:G1RSetUpdatingPauseTimePercent | 我们推荐设置为默认值的一半即 5 %,以使更多时间并发以减少暂停持续时间。 | +| -XX:G1MixedGCLiveThresholdPercent | 调节何时将区域合并至年轻代混合 GC 中,调高该值可以减少 OldGC 发生的频率,而 Mixed GC 不那么消耗资源也不容易导致长时间的卡顿,因此我们推荐设置为 90。 | +| -XX:G1ReservePercent | Minecraft 新版本内存分配非常快,GC 时候可能缺乏足够空闲内存进行数据迁移。为了保证内存预留,我们推荐设置为默认值的两倍即 20。 | +| -XX:MaxTenuringThreshold | 通过将其设置为1,限制新生代到老年代的晋升,在不影响性能的前提下,成功规避了新生代的不合理晋升,而长期存活对象的 GC 将在混合 GC 周期中,可有效防止 Minecraft 短期对象过早进入老年代,提高了整体效率。 | +| -XX:G1MixedGCCountTarget | 设置触发 Full GC 之前,尝试 Mixed GC 的目标次数。默认值为 8。降低该值能降低 GC 开销,将停顿均匀分布减少顿卡。| +| -XX:G1HeapRegionSize | 设置 G1GC 堆大小。任何此大小的一半(4MB)的内存分配都将划分到老年代。而使用 Java 默认值大多数情况下会太低,这会对象导致被销毁,降低内存利用效率。 | +| -XX:SurvivorRatio | 由于我们大幅减少了 MaxTenuringThreshold,因此我们将大幅减少幸存者空间的使用。这样可以释放更多区域供 Eden 使用。 | + +### 其他参数 + +下面是关于其他方面的优化的说明: + +### 其他可选的建议设置: + +| 参数 | 说明 | +| :--------------------------------- | :----------------------------------------------------------- | +| -Dpaper.alwaysPrintWarningState | Paper 服务器可用 - 将其设置为 `false` 将减少在控制台输出配置不正确、潜在问题或其他非致命但需要注意的警告信息。这意味着只有第一次出现警告时会被打印,之后相同警告不再重复显示,有助于减少日志的冗余。| +| -Duser.timezone=GMT+08 | 设置 JVM 的默认时区为格林威治标准时间(GMT)加8小时,即中国标准时间(CST)。这会影响到日期和时间相关的操作,确保它们按照预期的时区进行处理。| +| -Dfile.encoding=UTF-8 | 指定 JVM 文件读写时使用的字符编码为 UTF-8。UTF-8 是一种普遍支持多语言的字符编码格式,可以正确处理各种语言的文字,避免乱码问题。| +| --enable-preview | 启用 Java 预览功能。Java中的预览特性是即将推出的语言或 API 功能,它们尚未成为最终标准,但可以通过此标志在当前版本的Java中试验和测试。| +| --add-opens=java.base/java.lang=ALL-UNNAMED | 改变模块系统的访问权限,开放 `java.base` 模块中的` java.lang` 包给所有的未命名模块访问。这对于某些反射操作或在模块系统中需要访问原本受保护的内部API的应用非常有用。| +| --add-modules=jdk.incubator.vector | 启用 Java incubator 模块。模块包含实验性质的API,比如向量计算 API(Vector API),这些 API 在正式成为标准库的一部分之前,可以通过此选项进行实验和评估。| + +
+ +**更多有用的 Paper 服务器可用的参数请查看 [Paper System Properties](https://docs.papermc.io/paper/reference/system-properties)** \ No newline at end of file diff --git a/docs/正式开服/_images/nogui.jpg b/docs/准备工作/_images/nogui.jpg similarity index 100% rename from docs/正式开服/_images/nogui.jpg rename to docs/准备工作/_images/nogui.jpg diff --git a/docs/准备工作/基础知识/什么是启动脚本.md b/docs/准备工作/基础知识/什么是启动脚本.md index ecce464677..86e30bb2e4 100644 --- a/docs/准备工作/基础知识/什么是启动脚本.md +++ b/docs/准备工作/基础知识/什么是启动脚本.md @@ -28,32 +28,20 @@ sidebar_position: 6 * 非标准参数(-X):默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容; * 非Stable参数(-XX):此类参数各个 JVM 实现会有所不同,将来可能会随时取消,需要慎重使用; -以本人经常使用的基于 Aikar Flag 举个例子,该 Flag 基本是通用的,适用于 4G - 20G 内存,若想更改内存大小只需要更改 Xms 和 Xmx 相同即可: - -```bash -java -Xms12G -Xmx12G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -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 -DPaper.printStacktraceOnBadPluginClassAccess=false -Dpaper.alwaysPrintWarningState=false -Duser.timezone=GMT+08 -Dfile.encoding=UTF-8 -Xlog:async --enable-preview --add-opens=java.base/java.lang=ALL-UNNAMED --add-modules=jdk.incubator.vector -jar 核心名.jar --nogui -``` - -:::warning - -**不要忘记改最后的“核心名.jar!** - -::: - -:::warning - -**不要忘记改最后的“核心名.jar!** - -::: - -有点长,但是我会一个个讲解他们的作用 - ## 基础 ```bash java -Xms12G -Xmx12G -jar 核心名.jar nogui ``` +:::warning + +作为新手,不用在意大多数参数的作用,你需要做的就是开启服务器。 + +**不要忘记改最后的“核心名.jar!** + +::: + | 参数 | 说明 | | ----------- | ----------- | | -Xmx[size] | 设置最大内存大小,默认为物理内存的1/4或者1G,需大于2M,可以指定单位K/M/G | @@ -61,91 +49,41 @@ java -Xms12G -Xmx12G -jar 核心名.jar nogui | -jar | 为 Java 指定需要运行的 Jar 程序 | | ----nogui | 关闭服务器 GUI,少量性能提升,大多数人不需要用到 | +
+ --nogui干了什么 + +不显示类似下面的GUI + +![](_images/nogui.jpg) + +真的,这个GUI一点用没有,别开它了 + +
+ :::info 1. 无论什么时候,分配内存时一定要多预留15%左右内存,如服务器还剩余 10G 内存, 不要将 -Xms 设置到大于 9G 的内存,否则会很危险。 2. 在 G1GC 模式下,尽量保证 Xmx = Xms 因为如果二者不同 JVM 需要更多的内存时候,JVM需要申请更多内存,这个过程的耗时会导致顿卡。 +3. 更多的参数讲解,请前往 [JVM 参数介绍](/docs/%E4%BC%98%E5%8C%96/JVM参数优化.md) ::: -## 性能相关配置 - -我们这里使用的内存回收器为 `G1 (Garbage First)` ,所以我们要在启动参数中加上 `-XX:+UseG1GC` ,这样我们就能使用该回收器了 - -光设置使用该回收器也不行,还要对他进行一些配置,下面就会对配置参数进行讲解,你并不需要完全了解下面参数的意义与说明,可以跟着我的推荐值进行设置。 - -### G1GC 各种参数的说明: - -如果你是新手,或暂时没有性能问题,或者只是不感兴趣,这部分可以不看,但如果你感兴趣的话... - -
- 这里有适合好奇宝宝的完整说明 - -| 参数 | 说明 | -| :--------------------------------- | :----------------------------------------------------------- | -| -XX:+UseG1GC | 使用 G1 GC。 | -| -XX:G1NewSizePercent | 设置新生代区域大小。由于 Minecraft 拥有大量短期对象,所以需要更多新生代空间,而新一代太小会导致服务器顿卡。 | -| -XX:G1MaxNewSizePercent | 设置最大新生代区域大小。 | -| -XX:MaxGCPauseMillis | 设置一个 GC 暂停时间期望目标,这是一个非硬性目标,JVM 会尽可能的保证这个目标。 | -| -XX:G1HeapWastePercent | 当堆中有超过这个百分比的内存是空闲或可回收的,它会触发一次 Mixed GC,从而尽量避免 Full GC。 | -| -XX:InitiatingHeapOccupancyPercent | 设置了开始 Mixed GC 时堆的占用率阈值,默认为 45%, 降低该值可以更早地开始回收老年代空间,避免老年代快速增长导致较长的 GC 停顿。 | -| -XX:G1RSetUpdatingPauseTimePercent | 我们推荐设置为默认值的一半即 5 %,以使更多时间并发以减少暂停持续时间。 | -| -XX:G1MixedGCLiveThresholdPercent | 调节何时将区域合并至年轻代混合 GC 中,调高该值可以减少 OldGC 发生的频率,而 Mixed GC 不那么消耗资源也不容易导致长时间的卡顿,因此我们推荐设置为 90。 | -| -XX:G1ReservePercent | Minecraft 新版本内存分配非常快,GC 时候可能缺乏足够空闲内存进行数据迁移。为了保证内存预留,我们推荐设置为默认值的两倍即 20。 | -| -XX:MaxTenuringThreshold | 通过将其设置为1,限制新生代到老年代的晋升,在不影响性能的前提下,成功规避了新生代的不合理晋升,而长期存活对象的 GC 将在混合 GC 周期中,可有效防止 Minecraft 短期对象过早进入老年代,提高了整体效率。 | -| -XX:G1MixedGCCountTarget | 设置触发 Full GC 之前,尝试 Mixed GC 的目标次数。默认值为 8。降低该值能降低 GC 开销,将停顿均匀分布减少顿卡。| -| -XX:G1HeapRegionSize | 设置 G1GC 堆大小。任何此大小的一半(4MB)的内存分配都将划分到老年代。而使用 Java 默认值大多数情况下会太低,这会对象导致被销毁,降低内存利用效率。 | -| -XX:SurvivorRatio | 由于我们大幅减少了 MaxTenuringThreshold,因此我们将大幅减少幸存者空间的使用。这样可以释放更多区域供 Eden 使用。 | - -### 其他参数 - -下面是关于其他方面的优化的说明: - -**不要忘记改最后的“核心名.jar!** -**不要忘记改最后的“核心名.jar!** -**不要忘记改最后的“核心名.jar!** - -### 其他可选的建议设置: - -| 参数 | 说明 | -| :--------------------------------- | :----------------------------------------------------------- | -| -Dpaper.alwaysPrintWarningState | Paper 服务器可用 - 将其设置为 `false` 将减少在控制台输出配置不正确、潜在问题或其他非致命但需要注意的警告信息。这意味着只有第一次出现警告时会被打印,之后相同警告不再重复显示,有助于减少日志的冗余。| -| -Duser.timezone=GMT+08 | 设置 JVM 的默认时区为格林威治标准时间(GMT)加8小时,即中国标准时间(CST)。这会影响到日期和时间相关的操作,确保它们按照预期的时区进行处理。| -| -Dfile.encoding=UTF-8 | 指定 JVM 文件读写时使用的字符编码为 UTF-8。UTF-8 是一种普遍支持多语言的字符编码格式,可以正确处理各种语言的文字,避免乱码问题。| -| --enable-preview | 启用 Java 预览功能。Java中的预览特性是即将推出的语言或 API 功能,它们尚未成为最终标准,但可以通过此标志在当前版本的Java中试验和测试。| -| --add-opens=java.base/java.lang=ALL-UNNAMED | 改变模块系统的访问权限,开放 `java.base` 模块中的` java.lang` 包给所有的未命名模块访问。这对于某些反射操作或在模块系统中需要访问原本受保护的内部API的应用非常有用。| -| --add-modules=jdk.incubator.vector | 启用 Java incubator 模块。模块包含实验性质的API,比如向量计算 API(Vector API),这些 API 在正式成为标准库的一部分之前,可以通过此选项进行实验和评估。| - -
- -**更多有用的 Paper 服务器可用的参数请查看 [Paper System Properties](https://docs.papermc.io/paper/reference/system-properties)** - ## 如何设置自动重启 -将前面提到的所有东西集合起来,对于 Windows `start.bat` 可参考的脚本如下(你也可以使用笨蛋脚本自动生成) - 对于 Windows `start.bat` 可参考的脚本如下: ```bash @ECHO OFF :start -<<<<<<< HEAD -java -Xms12G -Xmx12G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -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 -DPaper.printStacktraceOnBadPluginClassAccess=false -Dpaper.alwaysPrintWarningState=false -Duser.timezone=GMT+08 -Dfile.encoding=UTF-8 -Xlog:async --enable-preview --add-opens=java.base/java.lang=ALL-UNNAMED --add-modules=jdk.incubator.vector -jar 核心名.jar --nogui -======= java ..... -jar 核心名.jar --nogui ->>>>>>> e063a2051d6b8981ee20588d13a9b6870ea6758d goto start ``` -对于 Linux `start.bat` 可参考的脚本如下: +对于 Linux `start.sh` 可参考的脚本如下: ```bash while [ true ]; do -<<<<<<< HEAD - java -Xms12G -Xmx12G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -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 -DPaper.printStacktraceOnBadPluginClassAccess=false -Dpaper.alwaysPrintWarningState=false -Duser.timezone=GMT+08 -Dfile.encoding=UTF-8 -Xlog:async --enable-preview --add-opens=java.base/java.lang=ALL-UNNAMED --add-modules=jdk.incubator.vector -jar 核心名.jar --nogui -======= java ..... -jar 核心名.jar --nogui ->>>>>>> e063a2051d6b8981ee20588d13a9b6870ea6758d echo 服务器自动重启中 echo 同时按下 CTRL + C 关服. done diff --git a/docs/准备工作/基础知识/服务端架构.md b/docs/准备工作/基础知识/什么是服务端.md similarity index 71% rename from docs/准备工作/基础知识/服务端架构.md rename to docs/准备工作/基础知识/什么是服务端.md index 6e7662c28f..fffca6850c 100644 --- a/docs/准备工作/基础知识/服务端架构.md +++ b/docs/准备工作/基础知识/什么是服务端.md @@ -2,28 +2,57 @@ sidebar_position: 1 --- +# 什么是服务端 + 我们先来简单看一眼 Purpur 的文件夹结构: ```c -Purpur ├─assets // 储存 Minecraft 音效贴图等重要文件,不要乱动 ├─cache // 缓存文件夹,一般放置 Minecraft 原版服务器 ,对于 Purpur fork 服务器一般会有 spark ├─config // Paper fork 服务器特有的配置文件,用于放置 Paper 的配置文件 +├─crash-reports // 存放服务器崩溃的完整报告 +├─libraries // 存放服务器及部分插件的依赖库 ├─logs // 存放服务端日志的文件夹 -├─libraies // 存放服务器及部分插件的依赖库 ├─plugins // 存放插件的文件夹 -├─version // 存放对应版本需要的依赖 jar +├─versions // 存放对应版本需要的依赖 jar ├─world // 主世界文件夹 +│ ├─advancements +│ ├─data +│ ├─datapacks +│ │ └─bukkit +│ ├─entities +│ ├─playerdata +│ ├─poi +│ ├─region +│ └─stats ├─world_nether //地狱世界文件夹 +│ └─DIM-1 +│ ├─data +│ ├─entities +│ ├─poi +│ └─region └─world_the_end //末地世界文件夹 + └─DIM1 + ├─data + ├─entities + ├─poi + └─region ``` -对于类似 Catserver 的混合服务器,文件夹结构是类似的,基本就多了 mod 文件夹,少了 Bukkit 的下游服务器特有的配置(如 spigot.yml/)。 +对于类似 Catserver 的混合服务器,文件夹结构是类似的,基本就多了 mods 文件夹,少了 Bukkit 的下游服务器特有的配置(如 purpur.yml 等)。 + +:::info 对于世界文件夹的详细说明,请前往[世界文件架构](/docs/准备工作/基础知识/什么是世界.md) +::: + ## 根目录下的一些文件 +- `.console_history` + +存放了控制台(又叫后台)曾经使用过的指令,方便你使用键盘中的 ↑ 键快捷查找曾使用的指令,也可用于查看后台异常。 + - `banned-ips.json` 以 json 格式存放的被 ban IP 玩家的 UUID 及游戏名称等相关信息,一旦玩家被 banip ,此 IP 将无法再进入服务器。 @@ -78,7 +107,7 @@ Spigot 服务器都有的配置文件。 - `version_history` -一些 Minecraft 和服务端核心的版本信息。 +一些 Minecraft 和服务端核心的版本信息,一般记录着曾经使用过的版本。 - `whitelist.json` @@ -86,4 +115,8 @@ Spigot 服务器都有的配置文件。 至此,大部分的以 Bukkit 为基础的服务器核心服务端的结构已经大致呈现在您眼前。 -[参考文献](https://github.com/Mhy278/MinecraftServerHostGuide/blob/master/Structure.md) +:::tip + +如果你的服务端有更多的文件,大概率是插件(如 ItemsAdders、FAWE 等插件会释放更多文件夹)创建的文件夹,一般来说无需担心。 + +::: \ No newline at end of file diff --git a/docs/正式开服/开启服务端.md b/docs/正式开服/开启服务端.md index 279dbd72ac..c1d8e95a82 100644 --- a/docs/正式开服/开启服务端.md +++ b/docs/正式开服/开启服务端.md @@ -31,8 +31,6 @@ sidebar_position: 1 ## 启动命令 -~~最简单的启动命令当然是java -jar~~ - 现在你把下载好的服务端核心放到一个空文件夹里 ![](_images/1.png) @@ -57,58 +55,35 @@ sidebar_position: 1 ![](_images/1.png) -在这个文件夹里创建一个txt文件,重命名为bat后缀的文件 如 `run.bat` +在这个文件夹里创建一个txt文件,重命名为bat后缀的文件 如 `start.bat` [文件看不到后缀怎么办](https://cn.bing.com/search?q=%E6%96%87%E4%BB%B6%E7%9C%8B%E4%B8%8D%E5%88%B0%E5%90%8E%E7%BC%80) -用你前面下的文本编辑器编辑这个文件,写入以下信息 +用你前面下的文本编辑器编辑这个文件,写入以下信息并保存,然后双击 `start.bat` ``` -java -Xms1G -Xmx2G -jar 核心名.jar --nogui +java -Xms2G -Xmx2G -jar 核心名.jar --nogui ``` -### 解释 +## 最初的开启 -| 单词 | 解释 | -| --- | ----------- | -| java | 启动java虚拟机 | -| -Xms1G | 设置初始内存大小为 1GB 可自行调整 | -| -Xmx2G | 设置最大堆内存大小为 2GB 可自行调整 | -| -jar 核心名.jar | 这部分告诉 Java 程序去运行一个叫做 核心名.jar 的 JAR 文件 | -| --nogui | 不显示GUI | +双击启动脚本后,大概率会卡在你会看到 Downloading mojang_x.x.x.jar,请耐心等待或查看[加速 mojang 核心下载](/docs/扩展阅读/常见问题.md) -
- --nogui干了什么 +一旦下载完成,他会提示: -不显示类似下面的GUI +``` +You need to agree to the EULA in order to run the server. Go to eula.txt for more info. +``` -![](_images/nogui.jpg) +用文本编辑器打开此目录下生成的 `eula.txt` ,将里面的 `eula=false` 改为 `eula=true` -真的,这个GUI一点用没有,别开它了 +eula 就像是用户协议一样的东西,你想知道讲了啥,点 [这里](https://zhuanlan.zhihu.com/p/463084883) -
- -保存,然后双击它 - -[卡在Downloading mojang_x.x.x.jar怎么办](/docs/扩展阅读/常见问题.md) - -他会提示你 -> You need to agree to the EULA in order to run the server. Go to eula.txt for more info. - -用文本编辑器打开此目录下生成的 `eula.txt` - -将里面的 `eula=false` 改为 `eula=true` - -eula就像是用户协议一样的东西,你想知道讲了啥,点 [这里](https://zhuanlan.zhihu.com/p/463084883) - -改好之后重新开启服务器 - -当出现 - -> Done (6.554s)! For help, type "help" - -的字样说明服务器已经开启 +改好之后重新开启服务器,当出现以下字样说明服务器已经成功开启。 +``` +Done (6.554s)! For help, type "help" +``` :::tip @@ -118,29 +93,7 @@ eula就像是用户协议一样的东西,你想知道讲了啥,点 [这里]( ## 更复杂的bat -你可以用 http://flags.sh/ 或 https://startmc.jakaco.xyz/ 来做优化的启动命令 - -``` -rem 注释 - -rem 关闭回显 -@echo off - -rem 设置编码为UTF-8 -chcp 65001 - -title 此处设置窗口标题 - -:start -echo 开始启动MC服务器 - -java -Xms1G -Xmx2G --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -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 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -jar server.jar --nogui - -echo MC服务器已关闭 -echo 服务器正在重新启动..。 -echo 按 CTRL + C 停止。 -goto :start -``` +请参考 [JVM参数优化](/docs/优化/JVM参数优化.md) ## 笨蛋脚本 @@ -156,48 +109,46 @@ goto :start ## 正版验证 -正版验证默认被开启,如果你没有用正版启动游戏,那么加入服务器会出现 +正版验证默认被开启,不关闭正版验证的话盗版玩家是不能加入游戏的。如果你没有用正版启动游戏,那么加入服务器会出现 ![](_images/无效会话.png) -是的,不关闭正版验证的话盗版玩家是不能加入游戏的 - 在 **server.properties** 中找到此项 + ``` online-mode=true ``` -将true改为false,保存,重启服务端 - +如果你想关闭正版验证,将 true 改为 false ,保存,重启服务端 :::danger -不要开服开到一半去改正版验证!!! - -那样会造成UUID混乱,玩家数据丢失 +不要开服开到一半去改正版验证! 这会造成UUID混乱,玩家数据丢失 ::: ## 最大玩家数 在 **server.properties** 中找到此项 + ``` max-players=20 ``` -后面的数字就是你希望这个服务器最大能进入的玩家数 +后面的数字就是你希望这个服务器最大能进入的玩家数。 ## 服务器种子 在 **server.properties** 中找到此项 + ``` level-seed= ``` -这里面就可以填上你想要的种子 +这里面就可以填上你想要的种子。 :::note -你可能会发现一些结构,比如村庄的生成,并不会遵循种子,是由于spigot及其下游服务端加入了随机种子,地形的生成也会出现一些偏差 +你可能会发现一些结构,比如村庄的生成,并不会遵循种子,是由于 Spigot 及其下游服务端加入了随机种子,地形的生成也会出现一些偏差 当然,你仍然可以利用种子定位群系,比如找史莱姆区块 @@ -206,11 +157,9 @@ level-seed= ## 服务器端口 在 **server.properties** 中找到此项 + ``` server-port=25565 ``` -后面就可以改成你想要的服务器端口,当然,玩家连接的也需要更改(或者使用srv转发) - - - +后面就可以改成你想要的服务器端口,当然,玩家连接的也需要更改(或者使用 srv 转发) \ No newline at end of file