Minecraft 服务器维护与管理经验

本文编写于2020年,目前已不再更新,内容仅供参考。

本文字数 22000 ,阅读时间约需 30~60 分钟

目前国内关于开服的教程非常多,但是对于如何进行管理和维护的文章屈指可数,希望本文能给各位服主/管理 一些经验和启发。

本文是自2014年以来积累的服务器维护与管理经验,包含一些主观的看法,由于时间仓促,难免出现错误,欢迎指正

本文会介绍一些开服相关的必要知识,但本文 不是 Minecraft 开服的基础教程。

本文默认读者有一定的开服经验,如果没有开过服务器,可以搜索相关的开服教程并进行实践。
如果您经验丰富,本文提供了拓展阅读的相关文章供参考(英语)


技术要求

英语要求

只是运行一个MC服务器,对英语水平的要求并不高,网上有大把的中文教程。如果使用面板服,一点英语不会都能开。但如果想自己开服、使用最新的插件、了解更多高价值的内容、或是出现一些疑难杂症,这些问题很难在中文论坛搜索到,掌握英语不仅能节省大量时间,也能帮助你快速解决问题。
正常初中英语水平+搜索引擎足以应付大多数问题,但对于非计算机专业方向的管理者,可能对于部分专业词汇会比较陌生,有兴趣可以针对性学习(大概100~200个)。

注: 由于机器翻译的局限性,在翻译后反倒可能对读者造成干扰(例如 Player -> 球员,Help -> 救命 等),因此不建议进行全文机翻,对于不会的单词 可以使用 划词翻译 等工具辅助阅读。

网络知识要求

如果使用的是面板或者租用的VPS,这部分知识不是特别重要。但如果想自己在家搭建服务器,则需要了解一些基本的网络知识。

如果想深入了解,可以自行搜索相关资料学习。
熟悉以下概念:

  • 服务器
  • IP (IPv4)*
  • 端口
  • 域名
  • 公网
  • NAT
  • 端口映射
  • 代理
    *由于中国大陆地区IPv6部署仍存在一些问题,因此本文暂不讨论此部分内容。

编程知识要求

虽然开服不需要会编程,但如果有Java或其他语言的软件开发经验,对于排查、解决问题会有较大的帮助,并且自己也可以尝试编写插件。

国际互联网

由于安全网关的限制,在大陆访问境外网站速度可能非常慢,甚至无法正常访问。
虽然 MC服务端 运行并不需要国际互联网,但大部分有用的插件、资料基本都需要使用 Google 等搜索引擎才能检索(包括部分服务端第一次启动时也需要下载原版 Vanilla 核心)。
如果不能正常访问国际互联网,可能需要花更多的时间(甚至无法)解决问题。所以强烈建议能与国际互联网建立稳定的连接。

搜索引擎与资源

由于高价值的资讯大部分集中在国外,并且大部分内容都是基于英语,国内搬运需要一定时间。
因此使用中文在X度上进行搜索时,搜出来的通常都是一些 X度贴吧,m*bbs这类网站,里面的资源可能是过时无效的二手信息。为了获取到最新的第一手信息,建议 使用英语Google 进行搜索。
如果没有办法使用 Google ,可以考虑使用 微软的 Bing (国际版模式),在中国大陆也可以正常搜索(但如果没有科学上网,可能搜索结果点进去也非常慢或者打不开)。

插件相关

Spigot Resources
Bukkit Plugins
一般搜索插件的英文名称,都可以在前几条看到这些网站。通常在这里发布的插件是最新的版本。
部分资源可能会发布在 Github 上,可以点击 Release 标签,找到最新的版本并下载。
拓展阅读 (英文):

  1. [Top 10 Minecraft plugins][Top 10 Minecraft plugins]

服务器类型选择

服务端选择

目前主流的服务端有:

  • 官方原版 (官端) Vanilla
  • Spigot -> Paper
    !> 注: Spigot 特性与 Vanilla 未必一致,不适合”硬核”玩家

    关于服务端的选择,网上有其他的教程,本文仅做简要说明,有兴趣可以自行搜索了解。

拓展阅读 (英文):

  1. 你可以在 [bStats (https://bstats.org/)][bstats] 查看全世界服务端、MC版本、系统、Java版本 的统计数据。
  2. 关于 Java 和 Bedrock 服务端 的选择:
    [Should you run a Minecraft Java Edition or Bedrock Edition server?][java_or_bedrock]
  3. 关于选择 Paper 或 Spigot:
    [Paper vs Spigot, which should you use?][Paper vs Spigot, which should you use?]
  4. 「推荐阅读」Minecraft 多人游戏近十年的发展 [A Decade of Survival Multiplayer. Celebrating the first 10 years of the Minecraft Multiplayer Community][decade-of-minecraft-multiplayer]
关于各个版本 (点击展开折叠) 因为版权相关原因(有兴趣的可以自己网上查),CraftBukkit 在2014年后 不再更新。 Spigot 是 Bukkit API 的实现,也是目前主流的服务端,可以使用基于 Bukkit API 开发的插件。 Paper 是在 Spigot 基础上进行开发和优化,支持更多的功能,也是目前主流的服务端 。(注意,Paper 理论支持 Spigot 的所有插件,但 Spigot 并不一定支持使用 Paper API 的插件) > 「2020-06-08」PaperMC 决定 [修正原版的一部分 Bug][TNT Duping or Bedrock Breaking issues? READ ME],包括但不限于禁止 破基岩、刷地毯/TNT 等,虽然官方目前提供了配置项 ``unsupported-settings`` 进行配置,但未来可能不再支持一些影响游戏平衡的特性(Bug)。

[Tuinity][Tuinity] 是目前基于 Paper 的一个服务端,开发者是 Paper 团队的成员,开发团队生成称进行了更加深度的优化(光照与区块生成等),能提升多玩家在线时的性能。由于目前还在开发中,可能会出现一些Bug(暂时还没遇到),如果对性能有一定追求,且有一定解决问题的能力,可以考虑使用此服务端。
!> Tuinity 已停止更新

Mod端则有 Forge、Sponge 和新出的 Fabric,对mod端不熟悉,无法进行详细的说明,还请见谅。

正版与盗版

目前Minecraft官网已经支持支付宝购买,并且还有一些(非法)渠道可以获取到正版,正版基本已经满地都是,建议优先选择开正版服。

白名单

是否开启白名单取决于服务器自身的状况。
!> 注意,开启白名单≠玩家素质变高,玩家素质主要取决于白名单的审核标准
以自己管理过的服为例,开启白名单后,出现恶性事件的数量会显著低于无白名单的服务器。但玩家数量也会较少,并且管理员需要额外精力处理玩家的白名单申请。
由于近年来出现了非法的免费正版账号获取服务,正版账号的获取门槛变得极低,所以单纯的正版验证其实没办法阻挡恶意玩家。


开服成本控制

开服务器最主要的问题就是钱,没有钱服务器就开不下去,这是最现实的一个问题。所以对于服务器的成本控制,也是一件需要注意的事情。

面板与租用VPS

价格上 面板服< 租用 VPS ,但 面板服 的 “可玩性” 没有VPS高,并且某些地方可能阉割严重,甚至无法带满额定玩家。

之前遇到过某服务提供商标称25人,实际进入5人后,一旦玩家分散开,由于硬盘IO性能差、CPU垃圾 导致的 区块读取和加载缓慢 使得服务器的 TPS 剩下个位数,完全无法正常游戏。

如果需要使用 VPS,则价格就会相对较高一些。并且对于技术有一定要求(虽然网上教程也是满地都是),具体的价格可以去某宝搜索关键字: minecraft + VPS 。某宝看了某个口碑较好的商家,通常最低配置一年下来,也需要近千元的开销。并且还可能有无良商家超售,导致实际性能和稳定性更差。

因为 Minecraft 服务端(指 Java 版)优化欠佳的原因,在 X里云,腾X云等云服务提供商 租用服务器并不划算,不仅价格较高,并且游戏体验也好不到哪里去。当然如果只是玩玩,可以用学生机之类的体验MC开服,一个月10块钱,足够和几个朋友玩玩纯净了。(需要了解 Linux 的基本使用)

使用租用的虚拟服务器,也要考虑倒闭或跑路的问题,数据安全较没有保障。并且成本也比较高。所以可以考虑自建服务器。有条件的可以托管给当地机房。

自建服务器

注意:这里指的是自己购买硬件,并且使用家用宽带开服。不包括托管
对于长期开放的服务器,虽然自建服务器的前期投入成本相比租用会高得多,但每个月平摊下来,最后的每月成本相比租用的服务器就有明显优势 (不开服了还能装块显卡打游戏)
自建服务器的成本主要有:

  1. 硬件费用(主要)
  2. 电费
  3. 带宽费用
  4. 时间成本
    自建服务器的问题:
  5. 电源稳定性 (可以额外使用 UPS 电源)
  6. 网络连接质量 (可以通过反向代理)
  7. 软硬件维护 (需要一定的计算机硬件知识)
    由于Minecraft服务器的特殊性质,硬件的选择会和普通的“服务器”主机有所不同,下文会对硬件的选择进行详细说明。

配置要求

硬件选择

Minecraft 服务端对于单核性能要求较高,且无法完全利用多核处理器。因此于多核心低频的服务器 CPU,游戏体验可能会不如单核高频的家用消费级 CPU
作为MC服务器通常不需要特别强的显卡,如果 CPU 没有核显,且没有特殊需求时,使用亮机卡即可。

注意: 如果能远程管理,亮机卡也不一定需要,但如果出现问题时,有亮机卡可以较快排除故障。
因此硬件的选择方向为:

  • 单核性能强的CPU
  • 较大的内存容量(频率影响较小,下文将会说明)
  • 大容量 SSD
  • 显卡能点亮即可(如果需要配备屏幕)

CPU

MC端大约能使用4~6个左右的核心/线程,对于单核性能要求较高。多核心处理器能够同时运行多个群组服,但单核主频过低可能导致单个服务器高负载时出现性能问题。
目前主流的看法是选择家用平台的高频处理器。外国论坛也有用户声称使用锐龙处理器有性能提升,而一般用于服务器平台的志强处理器虽然多核心,但单核频率低,反倒不适合用来开MC服务器。

对于虚拟化后出租的这类用途,服务器处理器或许体验会更好些,不在本文的讨论范围之内。

超频 (Overclocking)

!警告:超频有风险,可能导致硬件永久损坏!

至于是否超频,取决于每个服务器自身的需求(以及个人技术)。
由于服务端对单核性能要求较高,所以超频理论上能够提升MC服务端性能。
一般建议能保持睿满即可,如果对自己技术有信心可以尝试继续往上超频,但稳定性还是最重要的,超频后请至少烤机半小时测试。
散热器的选择可以通过CPU的发热和服务器的需求去判断。
个人认为没有必要超频,也不建议使用水冷

内存

根据外国用户的测试,内存频率 对于MC服务端的性能没有明显的影响。

“我有点关心内存频率是否会影响mc端的性能,所以我跑了些测试,虽然测试不是很严谨,不过看起来内存频率不像CPU频率那样有显著影响”
I run some tests, I was curious if RAM speed does matter for spigot performance. Test were not very accurate but it seems RAM speed don’t have influence on spigot performance, unlike CPU frequency. —— Gerolf,Apr 27, 2019

至于内存容量,建议单个服务器至少分配 2~4G 的堆空间,具体用量需要视服务器情况决定。
建议 Host 机内存容量在 16GB 以上

参考资料 (英文):
  • 内存频率是否影响性能?[Spigot-Does RAM frequency impacts spigot performance?][Does-RAM-frequency-impacts-spigot-performance?]
  • 需要更快的内存吗?[Spigot-Do we really need faster memory?][Do we really need faster memory?]

磁盘选择

目前主流的硬盘类型有 SSD (固态硬盘) 和 HDD (机械硬盘)。
强烈建议将系统、常用软件和 Minecraft 服务端放在 SSD 上, HDD 在 IO 负载较大时,会导致 TPS 大幅下降/读取区块的速度变得非常慢,严重影响游戏体验。
如果使用 MySQL ,也建议将数据库放置在 SSD 上。
HDD 则可以用作数据备份盘,用来备份服务端等数据。
至于容量,目前 240G 已足够大部分情况使用(存放系统文件、数据库),并且价格也不贵,如果不够,可以后续再加个更大的盘,旧的盘也可以用来存其他的数据。

  • (大部分数据都是跑图出来的,如果有资源世界定期换档,应该可以有效减少地图大小)
    关于硬盘详细参数的选择(容量、协议、缓存、颗粒/叠瓦等),取决于服务器需求(和钱包),并且网上已有足够的资料,这里不再赘述。

    注: 以下场景未经严格测试,仅供参考

  • 使用内存盘进行开服,体验与普通的 SSD 相比没有显著区别。
  • 低端(sata,无缓存) SSD 在游戏体验感知上与 高端 SSD (nvme,DRAM)对比没有显著区别。

UPS 不间断电源

如果不能保证稳定的供电,建议配备ups不间断电源,以避免突然断电导致数据丢失。
UPS 的规格 视用电设备和需求决定

操作系统选择

Windows

注意:对于Windows Server 和 Windows 10,可能会自动重启安装更新,需要自行设置更新策略
新手可以考虑使用 Windows 进行开服,操作和维护上也会较为方便。
如果只是开 MC 服,一般不用太在意 Consumer 版或 Server 版。
其实用 Win10 开服也无所谓,不过最好是修改 组策略 的 自动更新策略 为 手动更新。

Linux 发行版

Linux 上开服也不难,有兴趣建议尝试一下。
对于初学者,个人建议使用 Ubuntu,教程相对丰富。

系统位数

目前绝大部分情况下使用64位即可,在某些特殊情况下可能必须使用32位的 JVM,但通常会有明显的提示。

插件选择

插件的选择取决于服务器类型,几个比较常见的:

  1. CoreProtect
    • 记录、回档玩家操作
    • 基本算是必装的插件
  2. WorldEdit
    • 创世神插件,应该也算必装的管理类插件了
  3. ViaVersion
    • 允许更高版本的客户端加入服务器
  4. LuckPerms (权限管理)

拓展阅读(英文):
[Top 10 Minecraft Server Plugins][Top 10 Minecraft plugins]

不建议使用自动备份插件

1.14 之后 Paper 服务端 的保存方式出现变化,不要使用任何关于保存、备份的插件,可能导致存档损坏。

关于备份可见下文 服务器维护 备份部分

开源插件

部分插件会公开源代码,任何人都可以查看。相比闭源(不公开源码)插件,开源插件的安全性会较高一些。

注意:开源不等于绝对安全,请在正规渠道下载可信的插件。

付费插件

引用文章
部分插件可能需要付费,但部分服主可能不愿意花钱,选择从一些特殊渠道下载破解后的插件。
破解插件的主要风险:

  1. 不安全,可能被加入后门
    • 可以反编译去审查代码,会很累…
      • 如果遇到混淆可能会更加头疼
  2. 作者可能设置了逻辑炸弹
    • 有传闻出现过某服务器使用了盗版插件,导致整个服务器数据都被删除的事件。
      因此建议通过正规方式获取插件。

Java 的选择

Oracle JDK 商业授权

Oracle JDK 在 Java8u211 版本后变更了协议,仅限个人和开发用途使用
为避免不必要的麻烦,可以考虑使用第三方 JVM 进行开服
参考资料:

Java 版本

Java的版本目前分为 长期支持(LTS) 和 快速发布版本,建议服务器使用 LTS (长期支持版本)。
可以同时安装多个版本的 Java,按需选择合适的版本。

注: 1.17版本 必须 使用 Java 16 或以上
截至2023.11月,Java版本占有率(bStats统计数据):Java17 (70%),Java8 (10%) ,其他 (20%)
由于 Java9 及之后的版本 移除了一些API 和 限制反射(可配置关闭),因此Mod服和部分远古插件可能无法正常工作
1.12~1.16.5版本,建议选择 Java11 (如果有问题可以回退 8 )

1.17+ ,使用 最新版本

如果对最新技术感兴趣、愿意折腾,也可以使用最新的版本跑旧版本MC端(但可能无法正常工作)。

注: Java13 及之后版本优化了 ZGC 的实现,可提升垃圾回收时的性能,有兴趣可以参考下文 性能优化 部分

JVM 的选择

OpenJ9 已停止更新,以下内容不再适用

关于OpenJ9

目前主流的 JVM 实现 有 HotSpot 和 OpenJ9
HotSpot 是目前广泛使用的 JVM 实现,而 OpenJ9 相比 HotSpot ,进行了性能的优化,内存占用也更低,但可能会出现一些小问题。

注:

  1. 一些 Mod端 可能不支持 OpenJ9(会报错提示不支持)。
  2. Vanilla 在 OpenJ9 下似乎会出现激进的垃圾回收,CPU占用特别高的问题, 因此只能使用HotSpot,并且不能配置ZGC。

数据库

MySQL

大部分插件使用 SQLite 进行数据存储,部分插件会要求使用 MySQL 等数据库。

至于 CoreProtect 要不要使用 MySQL ,取决于数据量大小。

如果玩家较少,或数据量不多,使用 SQLite 即可。

但对于玩家较多,或想保留较久记录的用户,建议使用 MySQL,可大幅提升查询性能。

个人建议是有条件就上 MySQL。

MySQL 的数据存储位置推荐放到 SSD 上,可大幅提升性能。

如果使用非本地 MySQL,响应速度可能变慢。

由于 CoreProtect 数据量较大,如果玩家较为活跃,可能导致单表 (主要是 blocks 和 containers 表) 千万甚至上亿的数据量,建议准备 50G 及以上的空间

  • 对于单表千万或亿级数据,推荐在配置文件中设置一个较大的 Buffer 内存,以避免进行部分操作时失败。(默认是 8M,可以设置为 1G)
  • innodb_flush_log_at_trx_commit 则取决于业务要求,主要存储 CoreProtect 数据、有UPS,并且就算丢失一点记录问题也不大,可以设置为 0,如果对数据安全有一定要求也可设置为 2 或 1。

拓展阅读 (英语) :

  1. [Should you use MySQL with a Minecraft plugin?][Should you use MySQL with a Minecraft plugin?]

服务器网络架构:

通常个人开服都是一台机子运行一个或多个服务端,这里主要介绍单机运行,关于多台服务器运行多个服务端,可使用 BungeeCord/Velocity 进行配置。

单mc端:

这是最常见的情况,只运行一个服务端。应该没什么好说的(
如果运行了多个服务端,但并没有关联,也可以看作是运行单个服务端,只是端口不同。

BungeeCord / Velocity 群组网络

如果想要将多个服务器连接在一起,可以使用 BungeeCord 等反向代理,对外只需暴露一个端口,即可让玩家在服务器内进行各个子服的切换。
使用这种方法,也可以将各个子服务端到不同的物理服务器上,减少单台服务器的压力。
!> 注: 使用 BungeeCord 时请注意子服的安全问题,子服需限制允许通过BC加入的IP,避免后端服务器被直接连接。
Velocity 据称解决了BC的安全性和性能问题,有兴趣可以到官网(英语)阅读。
Velocity 相比 Bungeecord,还支持使用了 Forge,Fabric 的其他服务端在同一个群组网络中。Paper 目前已经支持 Velocity。

数据包会全部通过 BungeeCord 进行转发,可将BC设置到网络较好的服务器上为玩家提供良好的连接。(但不推荐这么做,因为后端还需要暴露端口,建议使用TCP转发、反向代理方案实现)
如果配置了 TCP 转发、未设置 IP-forwarding ,IP可能会全部变成反代服务器的 IP,需要单独设置转发时带上原始 IP 地址。

网络要求

服务器带宽的选择,取决于视距、同时在线人数和玩家的行为。
家用宽带20~40Mbps的上行基本可以应付中小型服务器日常需求。

公网、内网、端口映射

代理

如果有公网IP,可以允许玩家直连(通常情况下,家用网络要在路由器上配置端口映射)。
如果没有,则需要另一台有 公网IP 的机子(一般是云服务器)以反向代理的方式开放连接。
对于大部分家用宽带开服的用户,可能没有公网 IP,较大程度上增加了开服的难度。有公网 IP 的用户可能也会遇到玩家反映连接质量差、延迟高、经常掉线等问题。可以使用反向代理,通过 TCP 转发的方式进行加速。
关于 TCP 反向代理的方案有挺多种,可以使用 Nginx 、FRP 等软件进行反向代理,也可以使用第三方提供的反向代理服务。
通过反向代理,可以解决没有公网 IP、跨运营商/海外玩家连接质量差的问题。
注意:

  • 如果没有进行适当配置,服务端获取的玩家 IP 会全部变成反代服务器的 IP。
  • 反代服务器的带宽可能成为瓶颈
  • 关于后端获取真实IP,需要配置 proxy_forward
    反向代理可以使用 FRP 等软件自建,或者使用一些商业服务。

DDNS

对于购买云服务或托管的服务器,IP 通常都是固定的。但家用宽带开服时,由于运营商的限制,家宽的公网 IP 通常都会不定期变化,因此需要使用 DDNS,将域名解析到最新的 IP 地址上。
注意事项:

  1. 玩家可能在 IP 变化时断线
  2. 玩家在 IP 变化后一段时间内,可能无法连接上服务器
    • 对于此问题,可以让玩家更换 DNS 到 114.114.114.114223.5.5.5 等大型DNS上,更新会比较及时。或强制刷新 DNS 缓存。
      • 部分 ISP 会劫持 DNS 请求,可能需要 DOT 或 DOH 等方案

亦可使用反向代理等方式实现更稳定的网络连接。

域名

SRV记录

可以通过 SRV 记录来隐藏服务器端口号,也可实现网站与 MC 同一个域名,便于玩家记忆和输入。
例如:
隐藏端口:SRV server.example.com:25565 -> mc.example.com
网站游戏同域名:
网站A记录: www.example.com
游戏A记录:server1.example.com
游戏SRV记录: www.example.com -> server1.example.com
具体操作可自行参照网上教程。

智能解析

如果 DNS 提供商 有提供智能解析功能,可以实现根据不同 ISP 解析到不同地址等操作。
关于此类解析,请自行参照 DNS 解析服务商提供的教程。

其他特殊代理

目前出现了一些特殊的代理 ( DragonProxy(已停止更新)、Geyser 等) ,通过在连接时对协议进行翻译,可以实现 基岩版客户端 进入 Java 版服务器的功能。
截至 2021.06 ,1.16.5版本,这类代理可以在一定程度上进行游戏,但部分功能可能缺失,且与反作弊可能不兼容。有兴趣可以自行深入了解。

注: 此方案需要通过代理本身进行正版验证,因此有潜在的安全风险。

  1. 服务器本身接收明文的账号密码,可能被第三方记录。
  2. 相同 IP 登录大量账户可能会导致账号被 Mojang 封禁

管理相关

故障排除

大部分故障一般都很明显,会直接在后台打印出红色的错误信息。通常这类错误信息会包含插件的名称,以及错误的内容。对于一些说明不清楚的错误,使用搜索引擎一般都能找到解决方法。

更新插件/服务端通常可以解决大部分问题,另一些问题可能是配置文件错误,亦或者插件本身就有问题。
对于没有编程经验的用户,以下是分析错误信息的样例:

排错案例参考 (点击展开折叠)

这是一份异常样例(省略部分堆栈内容):

1
2
3
4
5
6
7
8
9
10
11
12
[WARN]: java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (table co_container has no column named meta)
[WARN]: at org.sqlite.DB.newSQLException(DB.java:383)
[WARN]: at org.sqlite.Conn.prepareStatement(Conn.java:383)
[WARN]: at net.coreprotect.database.Database.prepareStatement(Database.java:205)
[WARN]: at net.coreprotect.database.Database.prepareStatement(Database.java:236)
[WARN]: at net.coreprotect.consumer.Process.processConsumer(Process.java:52)
[WARN]: at net.coreprotect.consumer.Consumer.run(Consumer.java:48)
[WARN]: at java.lang.Thread.run(Thread.java:745)
[WARN]: java.lang.NullPointerException
[WARN]: at net.coreprotect.consumer.Process.processConsumer(Process.java:147)
[WARN]: at net.coreprotect.consumer.Consumer.run(Consumer.java:48)
[WARN]: at java.lang.Thread.run(Thread.java:745)

以上内容叫做 “异常信息”(”堆栈跟踪”) ,通常会在服务端或插件运行错误时显示在控制台。
第一行说明了 异常 的 类型 和 内容,在底下的信息中也可以看到有 CoreProtect 的字样,可以合理判断以下信息:

  • 异常插件:CoreProtect
  • 异常类型:java.sql.SQLException
  • 异常信息: [SQLITE_ERROR] SQL error or missing database (table co_container has no column named meta)

按以上的信息作为关键词搜索,可以找到这个解决方案:

关键词:
CoreProtect SQLException SQL error or missing database (table co_container has no column named meta)

—-搜索结果—–

网页:
#809 SQL exception - Issues - CoreProtect - Bukkit Plugins

信息:
Try creating a new database (delete your database.db file and restart your server). —— intelli posted a comment Jul 19, 2018

可以发现已经有用户提出了相同的问题,解决方法是删掉原来的database.db文件,重启服务器。

> 注意:很多情况下异常信息里就包含了解决方案,因此大部分问题一般可以轻松解决。但对于一些疑难杂症,不一定能直接找到有效的方案,请保持耐心,尝试一些不同的关键词和方案,或者向他人求助。 (记得附上详细的说明和日志哦)

版本更新

!> MC端大版本更新前一定要备份
不建议 MC跟着大版本立即更新

  1. 插件跟不上
  2. 可能有恶性 bug(刷物品等)
    建议等 1~2 个小版本后再更新确保稳定。

    可以使用 ViaVersion 等方案允许玩家使用高版本客户端加入低版本服务器。

提前测试

为了保证顺利进行更新,避免出现操作失误或其他问题而回退,可以在本地先进行测试演练。

Cloudflare for SSH, RDP and Minecraft
2020/04/14
https://blog.cloudflare.com/cloudflare-for-ssh-rdp-and-minecraft/

性能优化:

JVM 优化

关于OpenJ9的调优(英文) :
https://steinborn.me/posts/tuning-minecraft-openj9/

  • 注:此文章是 G1GC 的方案,Java 14 以后 可以考虑使用 ZGC

配置 ZGC (英文):
https://krusic22.com/2020/03/25/higher-performance-crafting-using-jdk11-and-zgc/
ZGC | Using -XX:SoftMaxHeapSize - 02 Jul 2020:
https://malloc.se/blog/zgc-softmaxheapsize

注: 在使用 Vanilla / Fabric 时,如果使用 OpenJ9 或启用了 ZGC ,会出现频繁的垃圾回收导致CPU占用100%,无法正常工作。

JVM 启动参数

以下是服务器的启动参数(感谢 NyaaCat 的 phoenixlzx 指导)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 基础配置项,启用JVM实验性选项、日志打印等,以及允许不安全反射(Java9 之后限制了非法反射)
COMMIN_PARAM="-XX:+IgnoreUnrecognizedVMOptions \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+ParallelRefProcEnabled \
-XX:+UnlockDiagnosticVMOptions \
-XX:+UseGCOverheadLimit \
-XX:+ShowCodeDetailsInExceptionMessages \
--illegal-access=warn"
# 配置ZGC
# NyaaCat 的 phoenixlzx 老师意见是为MC分配全部资源,不配置 Uncommit。
# 这里由于我所在的服务器大部分时间玩家不多,只有活动期间会有大量玩家进入,如果分配较大内存会有浪费。
# 所以设置一个 SoftMaxHeapSize 容量为日常的峰值,并配置了内存 Uncommit,用于在压力降低后返还内存给 Host 机。
# 这里有一个默认参数 -XX:ZUncommitDelay 为 300s
# 注意 ZGC 的 Uncommit 可能会消耗大量性能 : Note that committing and uncommitting memory are relatively expensive operations. A too aggressive (short) uncommit delay will just cause uncommitted memory to very soon be committed again, which can be a waste of CPU cycles and might in the end also impact the overall performance of your application.
ZGC="-XX:+UseZGC -XX:+ZUncommit -XX:SoftMaxHeapSize=${NORMAL_HEAP_SIZE} "
# 此部分为 X86 架构处理器下的性能优化,经过TNT压测作为测试对照,性能有显著提升。
X86_OPTMIZE="-XX:+UseCMoveUnconditionally \
-XX:+UseFPUForSpilling \
-XX:+UseNewLongLShift \
-XX:+UseVectorCmov \
-XX:+UseXMMForArrayCopy \
-XX:+UseXmmI2D \
-XX:+UseXmmI2F \
-XX:+UseXmmLoadAndClearUpper \
-XX:+UseXmmRegToRegMoveAll"