三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从零搭建《我的世界》1.21.11官方服务器:保姆级教程与性能优化

从零搭建《我的世界》1.21.11官方服务器:保姆级教程与性能优化

1. 项目概述:从零搭建一个稳定的《我的世界》官方服务器

最近有不少朋友在后台私信,问我怎么自己搭一个《我的世界》的服务器,特别是想用最新的1.21.11版本和朋友联机。网上的教程要么太老,要么语焉不详,照着做总会在奇奇怪怪的地方卡住。作为一个从Java版Beta 1.8就开始折腾服务器的老玩家,今天我就把自己这些年开服、维护、优化的经验,结合最新的1.21.11官方服务端,整理成一份保姆级的教程。这份教程的目标很明确:让你即使没有任何服务器运维经验,也能在自己的电脑或者租用的云服务器上,成功搭建一个稳定、流畅、可自定义的《我的世界》服务器,并且理解每一步操作背后的逻辑,以后出了问题自己也能排查。

自己开服的好处太多了。首先,你和朋友们的游戏世界完全由你们掌控,想装什么模组、玩什么玩法、定什么规则,都不受第三方平台限制。其次,数据完全私有,存档想备份就备份,想迁移就迁移,安全感十足。最后,这也是一个绝佳的学习机会,你能接触到基础的网络、系统、Java环境配置,这些技能在数字时代非常实用。接下来,我会从最基础的环境准备讲起,一直讲到服务器上线后的日常维护和性能调优,确保你不仅能“开起来”,更能“开得稳”。

2. 核心思路与方案选型:为什么选择官方服务端?

在开始动手之前,我们先要搞清楚几个核心问题:用什么服务端?在哪里运行?需要什么样的硬件?这些选择直接决定了后续操作的复杂度和服务器的最终体验。

2.1 官方服务端 vs. 第三方核心

对于1.21.11版本,我们首选Mojang官方提供的minecraft_server.1.21.11.jar。这是最纯净、最稳定、与客户端兼容性最好的选择。第三方服务端核心(如Paper、Spigot、Fabric+服务端模组)虽然能提供更好的性能和丰富的插件生态,但它们修改了游戏的原生逻辑,可能会引入一些不稳定性或与未来版本更新的兼容性问题。对于初次开服、追求原版纯净体验、或者只是想和小范围朋友联机的玩家来说,官方服务端是入门和稳定的不二之选。它的配置逻辑清晰,出了问题也更容易在官方Wiki或社区找到标准答案。

2.2 运行环境选择:本地电脑 vs. 云服务器

本地开服适合临时和小范围的联机(比如2-4个好友)。优点是零成本、延迟极低、操作直观。你只需要一台性能尚可的电脑(建议CPU不低于4核,内存8GB以上,并为服务器单独分配2-4GB内存),并确保网络上传速度足够(每个玩家大约需要100Kbps的上传带宽,10人联机至少需要1Mbps稳定上传)。但缺点也很明显:你的电脑必须一直开着;公网IP问题需要解决(后面会详细讲);而且会占用本地资源,影响你同时做其他事情。

云服务器开服是更专业和持久的选择。它提供了公网IP、7x24小时稳定运行、以及通常比家庭宽带更优质的上行带宽。国内外的云服务商(如阿里云、腾讯云、AWS Lightsail等)都有提供轻量应用服务器,选择一款配置为2核4GB或以上的Linux服务器(CentOS 7/8或Ubuntu 20.04/22.04 LTS)就完全足够支持10-20人同时在线。云服务器的初始配置稍复杂,但一劳永逸,特别适合想要长期运营一个小型社区服的朋友。本教程会同时涵盖这两种方式的详细步骤。

2.3 硬件与网络需求估算

很多新手开服卡顿,问题往往出在资源分配不足上。这里给一个简单的估算公式:

  • CPU:核心频率比核心数量更重要。Minecraft服务器是单线程性能敏感型应用。一个高主频的CPU(如3.5GHz+)比多核低频CPU体验更好。
  • 内存(RAM):这是最重要的参数。分配太少会频繁垃圾回收导致卡顿,分配太多反而会降低Java垃圾回收效率。对于原版1.21.11服务端,一个经验法则是:基础占用约1GB,每增加10名在线玩家,增加500MB-1GB。因此,5人服建议分配2-3GB,10人服建议3-4GB,20人服建议4-6GB。我们会在启动脚本中精确控制。
  • 硬盘:SSD固态硬盘是必须的。机械硬盘的读写速度会严重拖慢区块加载和存档保存速度,导致玩家移动时“卡区块”。至少需要预留10GB空间给服务器文件、世界存档和日志。
  • 网络带宽:计算下行和上行。下行带宽需求很低,主要上行。公式:所需上行带宽 (Mbps) ≈ 在线玩家数 * 0.1 Mbps。10人联机,有1Mbps的稳定上行带宽就足够了,但为了应对峰值,建议有2-3Mbps的余量。

注意:家庭宽带通常上行带宽远小于下行(例如100M宽带可能上行只有20M)。开服前务必用测速工具测试你的实际上行速度。云服务器的带宽通常是上下行对等的。

3. 详细开服步骤全解析

我们将开服过程拆解为清晰的四个阶段:环境准备、服务端获取与配置、网络打通、启动与测试。无论你选择本地还是云服务器,逻辑都是相通的。

3.1 第一阶段:基础运行环境搭建

Minecraft官方服务端是一个Java应用程序,因此第一步就是安装合适版本的Java。

1. 安装Java 17或更高版本从1.18版本开始,Minecraft服务端要求Java 17或以上。不要安装Java 8,虽然旧版教程可能推荐它。前往Oracle官网或Adoptium(Eclipse Temurin)网站下载JDK 17的安装包。

  • Windows系统:下载.msi安装包,双击安装,记住安装路径(例如C:\Program Files\Java\jdk-17)。
  • Linux系统(云服务器):通过包管理器安装更简单。以Ubuntu为例,打开终端(SSH连接后),执行以下命令:
    sudo apt update sudo apt install openjdk-17-jdk-headless -y
    安装后,通过java -version验证,应显示“openjdk 17.x.x”。

2. 创建专属服务器目录不要在桌面或下载文件夹直接运行服务器!创建一个独立的文件夹,例如D:\MC_Server_1.21.11或Linux下的~/mc_server。所有相关文件都放在这里,便于管理。

3. 获取官方服务端文件前往Minecraft官网的 下载服务器页面 ,找到对应1.21.11版本的minecraft_server.1.21.11.jar,下载并放入你刚创建的服务器目录。

3.2 第二阶段:服务端配置与启动脚本编写

直接双击Jar文件是开不了服的,我们需要编写启动脚本和配置文件。

1. 创建启动脚本(start.bat 或 start.sh)启动脚本的核心作用是告诉Java如何运行服务端,最关键的是分配内存。

  • Windows (start.bat):在服务器目录新建文本文档,重命名为start.bat,右键编辑,输入以下内容:
    @echo off title Minecraft 1.21.11 Server java -Xms3G -Xmx3G -jar minecraft_server.1.21.11.jar nogui pause
  • Linux (start.sh):在终端中,于服务器目录执行nano start.sh,输入以下内容:
    #!/bin/bash java -Xms3G -Xmx3G -jar minecraft_server.1.21.11.jar nogui
    然后赋予执行权限:chmod +x start.sh

启动参数详解

  • -Xms3G:初始堆内存大小(JVM启动时分配)。这里设为3GB。
  • -Xmx3G:最大堆内存大小(JVM能使用的上限)。这里也设为3GB。通常将Xms和Xmx设为相同值,可以避免运行时堆内存动态调整带来的性能波动。
  • -jar minecraft_server.1.21.11.jar:指定要运行的Jar包。
  • nogui:以无图形界面模式启动,节省资源。对于服务器这是必须的。
  • pause(Windows批处理):让窗口在服务器关闭后暂停,方便查看错误信息。

2. 首次运行生成配置文件双击start.bat或执行./start.sh。第一次运行会失败,并提示需要同意EULA(最终用户许可协议)。同时,它会生成一些必要的文件和文件夹,如eula.txtserver.properties

3. 编辑关键配置文件

  • 同意EULA:用记事本或nano打开eula.txt,将eula=false改为eula=true。这表示你同意Mojang的服务器运行协议。
  • 配置服务器属性:打开server.properties,这是服务器的核心配置文件。我们修改几个关键项:
    # 服务器IP,默认留空即可,让服务器绑定所有网络接口 server-ip= # 服务器端口,默认25565。如果此端口被占用或想在单机开多个服,可以修改。 server-port=25565 # 最大玩家数 max-players=20 # 服务器 MOTD (描述),会显示在玩家服务器列表里。支持颜色代码(§符号) motd=My First 1.21.11 Server # 是否开启正版验证。true表示只有正版账号能进入,false则离线账号也可进入(局域网联机常设为false)。 online-mode=true # 视距,控制玩家能看到的区块距离。越大越吃性能,建议设为6-10。 view-distance=10 # 是否生成怪物 spawn-monsters=true # 是否生成动物 spawn-animals=true # 游戏模式:survival(生存), creative(创造), adventure(冒险) gamemode=survival # 是否开启命令方块 enable-command-block=false # 网络压缩阈值。降低此值(如256)可以减小网络包体积,提升高延迟玩家的体验,但会增加CPU负担。 network-compression-threshold=256
    其他选项保持默认即可。保存文件。

3.3 第三阶段:打通网络连接(最关键的一步)

这是让朋友能从外部连接到你服务器的核心步骤,90%的连接问题都出在这里。

情况A:在本地电脑开服(让朋友通过互联网连接)家庭网络中的设备通常没有独立的公网IP,且处于路由器防火墙之后。你需要进行“端口转发”。

  1. 确定本地服务器的内网IP:在Windows命令提示符输入ipconfig,找到“IPv4 地址”(如192.168.1.105)。在Linux终端输入ip addr showifconfig查找。
  2. 登录路由器管理后台:浏览器输入路由器网关地址(通常是192.168.1.1192.168.0.1),输入管理员账号密码。
  3. 设置端口转发(Port Forwarding):在路由器设置中找到“端口转发”、“虚拟服务器”或“NAT”相关选项。
    • 新建一条规则。
    • 服务名称:随意,如“Minecraft”。
    • 内部IP地址:填入你刚才查到的本地IP(如192.168.1.105)。
    • 内部端口:25565
    • 外部端口:25565
    • 协议:选择“TCP”或“TCP/UDP”。
  4. 获取你的公网IP:在百度搜索“IP”,会显示你的公网IP地址(如123.123.123.123)。注意:很多家庭宽带是动态公网IP,重启光猫后可能会变化。可以考虑使用DDNS(动态域名解析)服务来解决。
  5. 朋友连接:让你的朋友在Minecraft客户端“多人游戏”中,直接添加服务器地址,输入你的公网IP:25565(例如123.123.123.123:25565)。

情况B:在云服务器开服云服务器自带公网IP,操作更简单,但需要配置系统防火墙。

  1. 获取云服务器的公网IP:在云服务商控制台查看。
  2. 配置服务器安全组/防火墙:这是云服务器的虚拟防火墙,必须放行端口。
    • 登录云服务商控制台,找到你的服务器实例,进入“安全组”或“防火墙”配置。
    • 添加入站规则:协议TCP,端口范围25565,源地址0.0.0.0/0(允许所有IP访问)或你朋友家的IP段以增加安全。
  3. 配置系统自身防火墙(以Ubuntu为例)
    sudo ufw allow 25565/tcp sudo ufw reload
  4. 朋友连接:地址为云服务器公网IP:25565

重要提示:无论哪种方式,在让朋友连接前,请务必先在你自己本地(服务器本机或同一内网的另一台电脑)用localhost或内网IP测试连接成功,确保服务器本身运行无误,再解决外部网络问题。

3.4 第四阶段:启动、测试与基础管理

1. 正式启动服务器再次运行start.bat./start.sh。这次应该能看到服务器控制台开始加载,生成世界,最后出现类似“Done (XX.XXXs)! For help, type “help””的提示,表示服务器启动成功。

2. 基础控制台命令服务器运行后,你可以在控制台输入命令管理服务器:

  • help:查看帮助。
  • list:列出当前在线玩家。
  • op <玩家ID>:给予玩家管理员权限。
  • ban <玩家ID>:封禁玩家。
  • save-all:手动立即保存世界。
  • stop:安全关闭服务器(务必用此命令关机,直接关闭窗口可能导致存档损坏)。

3. 首次进入与设置用Minecraft客户端(版本必须是1.21.11)添加服务器地址(本地测试用localhost,外部连接用你的公网IP),进入游戏。如果你是OP(管理员),可以在游戏内按T打开聊天栏输入命令,如/gamemode creative <玩家名>切换模式,/time set day设置时间为白天。

4. 性能优化与高级配置指南

服务器跑起来只是第一步,要让它运行得流畅稳定,还需要进行一些优化。

4.1 JVM参数调优

我们之前用的-Xms3G -Xmx3G是最基础的参数。对于追求更高性能的服务器,可以优化启动脚本。以下是一个更专业的Linux启动脚本示例(start_optimized.sh):

#!/bin/bash cd /home/user/mc_server java \ -Xms4G -Xmx4G \ # 堆内存 -XX:+UseG1GC \ # 使用G1垃圾回收器,适合大内存、低延迟场景 -XX:+ParallelRefProcEnabled \ -XX:MaxGCPauseMillis=200 \ # 目标最大GC停顿时间200毫秒 -XX:+UnlockExperimentalVMOptions \ -XX:+DisableExplicitGC \ -XX:+AlwaysPreTouch \ # 启动时预分配内存,减少运行时延迟 -XX:G1HeapRegionSize=8M \ -XX:G1NewSizePercent=20 \ -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=true \ -Daikars.new.flags=true \ -jar minecraft_server.1.21.11.jar nogui

这些参数(特别是Aikar‘s Flags)经过社区大量测试,能显著改善GC(垃圾回收)行为,减少游戏内的“TPS骤降”和卡顿。Windows系统也可以将这些参数添加到start.batjava命令后面。

4.2 服务器属性深度优化

回头再看server.properties,有几个对性能影响巨大的参数:

  • view-distance这是性能头号杀手。视距每增加2,服务器需要处理的区块数量呈指数级增长。对于10人左右的服,设为8-10是平衡点。超过12将对硬件提出很高要求。
  • simulation-distance:模拟距离,控制哪些区块内的生物、红石等会进行更新。通常设置得比view-distance小或相等(如8),可以有效减轻服务器运算负担。
  • max-tick-time:单个tick(游戏刻)允许的最大执行时间(毫秒)。默认60000(1分钟),如果某个tick卡住超过这个时间,看门狗线程会强制关闭服务器。可以适当调低(如30000)以便更快发现严重卡顿问题。
  • max-world-size:限制世界边界,可以防止世界文件无限膨胀,默认值29999984通常不用改。

4.3 使用Screen或Tmux保持服务器后台运行(Linux)

在Linux云服务器上,如果你直接SSH运行服务器,关闭SSH窗口进程就会终止。我们需要使用screentmux来创建持久化的会话。

# 安装screen sudo apt install screen -y # 创建一个名为mc的screen会话并进入 screen -S mc # 在screen会话中启动服务器 cd ~/mc_server ./start_optimized.sh # 然后按下 Ctrl+A,再按 D 键,将会话分离(detach),服务器在后台继续运行。 # 要重新连接会话查看控制台: screen -r mc # 如果忘记了会话名,可以用 screen -ls 列出所有会话。

这样,即使你断开SSH连接,服务器也会持续运行。

5. 日常维护、备份与故障排查

一个合格的服主不仅要会开服,更要会维护。

5.1 自动化备份脚本

世界存档是服务器最宝贵的资产。必须定期备份。这里提供一个简单的Linux备份脚本(backup.sh):

#!/bin/bash SERVER_DIR="/home/user/mc_server" BACKUP_DIR="/home/user/mc_backups" DATE=$(date +%Y%m%d_%H%M%S) cd $SERVER_DIR # 在备份前通知服务器并强制保存 screen -S mc -X stuff "say 服务器备份开始,可能会略有卡顿。$(printf '\r')" screen -S mc -X stuff "save-all$(printf '\r')" sleep 5 # 创建备份压缩包,包含世界、玩家数据等关键文件夹 tar -czf $BACKUP_DIR/world_backup_$DATE.tar.gz world/ world_nether/ world_the_end/ playerdata/ stats/ advancements/ # 删除超过7天的旧备份 find $BACKUP_DIR -name "world_backup_*.tar.gz" -mtime +7 -delete screen -S mc -X stuff "say 备份完成。$(printf '\r')"

然后使用crontab -e设置定时任务,例如每天凌晨4点执行备份:

0 4 * * * /bin/bash /home/user/mc_server/backup.sh

5.2 常见问题与解决方案速查表

问题现象可能原因解决方案
服务器启动失败,提示端口被占用25565端口已被其他程序(如另一个MC服务器)使用。1. 修改server.properties中的server-port为其他端口(如25566)。
2. 查找占用端口的进程并结束它(netstat -ano | findstr :25565)。
玩家无法连接,提示“连接超时”1. 服务器防火墙/安全组未放行端口。
2. 本地开服未做端口转发或转发错误。
3. 服务器未成功启动。
1. 检查云服务器安全组和系统防火墙规则。
2. 检查路由器端口转发设置,确保内网IP和端口正确。
3. 在服务器本机用localhost连接测试,先确保服务本身正常。
玩家连接被拒绝,提示“无效会话”server.propertiesonline-mode=true,但玩家使用了离线模式或非正版启动器。1. 确保所有玩家使用正版账号登录官方启动器。
2. 若为内部测试或特定情况,可将online-mode改为false注意:这会降低安全性,任何知道你IP的人都能用任意ID进入)。
游戏内频繁卡顿,TPS过低TPS(每秒刻数)低于20。原因可能是:
1. 内存分配不足或过多。
2. 视距(view-distance)设置过高。
3. 世界内存在大量高频红石、实体(生物、掉落物)堆积。
1. 在控制台输入tps命令查看TPS。如果持续低于20,需要优化。
2. 适当降低view-distancesimulation-distance
3. 使用/kill @e[type=item]清理掉落物,检查并拆除高频红石电路。
4. 考虑升级硬件或使用性能更好的服务端核心(如Paper)。
服务器运行一段时间后内存占用很高,逐渐变卡Java垃圾回收(GC)不充分,内存泄漏(虽不常见)。1. 使用优化后的JVM参数(如前文Aikar‘s Flags)。
2. 定期重启服务器(如每天一次),这是最直接有效的方法。可以通过计划任务在凌晨低峰期执行重启脚本。
世界存档损坏服务器非正常关闭(断电、强制结束进程)。1.立即停止对原存档的写入
2. 尝试使用备份恢复。
3. 如果没有备份,可以尝试使用Minecraft自带的level.dat旧备份:将world/文件夹中的level.dat_old重命名为level.dat,替换损坏的文件。

5.3 监控与日志查看

  • 实时监控:在服务器控制台,可以输入debug start开始性能分析,一段时间后输入debug stop,会在服务器目录生成一个性能分析文件,可以用专业工具查看。
  • 日志文件:服务器目录下的logs/latest.log记录了所有运行信息。遇到玩家报错或崩溃,首先查看这个文件。特别是崩溃时生成的hs_err_pid*.log文件,对于诊断JVM层面的错误至关重要。
  • 内存监控:可以安装简单的监控工具,如Linux下的htop,观察Java进程的内存和CPU占用是否正常。

开服是一个从搭建到持续优化的过程。按照这份教程,你应该已经成功启动了自己的1.21.11服务器。记住,稳定性源于细节:合理的硬件资源、优化的JVM参数、定期的备份和重启习惯。遇到问题不要慌,多查看日志,善用搜索引擎和社区(如MCBBS、Reddit的r/admincraft)。最开始的搭建阶段可能会遇到一些挫折,但当你和朋友在自己搭建的世界里畅游时,那种成就感是完全不同的。如果后续想增加模组、插件,或者升级到更高性能的服务端核心,那又是另一个有趣的故事了。

← 返回列表