ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

阿里云ECS部署Minecraft服务器:从选型到性能优化的完整实践指南

阿里云ECS部署Minecraft服务器:从选型到性能优化的完整实践指南 1. 项目概述为什么要在云上搭建MC服务器如果你是一个《我的世界》Minecraft 简称MC的深度玩家肯定经历过这样的场景想和三五好友一起联机生存但用局域网直连工具比如樱花穿透或者蛤蟆吃总是卡顿、掉线主机一关大家就都玩不了。或者你是一个小型社区的服主希望有一个7x24小时稳定运行、能承载更多玩家、并且自己拥有完全控制权的世界。这时自己搭建一个专属的MC服务器就成了最理想的解决方案。而选择阿里云ECS弹性计算服务来承载这个服务器则是一个兼顾了性能、稳定性和成本控制的明智之选。它相当于你在云端租用了一台永不关机的电脑拥有独立的公网IP全球各地的朋友只要知道地址就能随时加入。相比于使用家庭宽带云服务器避免了NAT穿透的麻烦和上行带宽的瓶颈相比于购买物理服务器它又省去了硬件维护、托管和电费的巨大开销。更重要的是阿里云提供了丰富的镜像和便捷的控制台让服务器的初始化、网络配置、安全维护都变得可视化且易于操作。本篇文章我将以一个资深服主和运维的角度手把手带你完成从零开始在阿里云ECS上搭建一个高性能、可维护的《我的世界》Java版服务器的全过程。我会重点拆解几个核心痛点如何根据预算和玩家数量选择最合适的ECS配置如何优化Java虚拟机JVM参数以榨干服务器性能避免出现“Internal Exception: java.net.SocketException: Connection reset”这类令人头疼的网络错误以及如何配置安全组和防火墙既保证服务器安全又让玩家能顺畅连接。无论你是想搭建一个仅供好友娱乐的小服还是一个准备长期运营的社区服这篇指南都能为你提供扎实的、可直接复现的实操方案。2. 核心需求解析与服务器选型在动手购买和配置之前我们必须先明确需求这直接决定了后续所有的技术选型和成本投入。盲目选择高配置会造成浪费而配置不足则会导致游戏体验极差玩家频繁卡顿、掉线。2.1 确定服务器规模与玩家承载量这是选型的首要依据。MC服务器对性能的消耗主要集中在CPU单核性能、内存和磁盘I/O上。2-5人小型好友服通常对插件/模组要求不高以原版或轻度魔改为主。核心压力在于生成新区块时的CPU瞬时计算。建议起步配置为2核4G。这个配置足以流畅运行原版或带有少量优化插件如Paper的服务端。10-30人中小型社区服可能会安装较多的插件如领地、经济、任务系统或一些轻量级的模组。此时需要更稳定的CPU和更大的内存来同时处理更多玩家的交互和实体怪物、动物活动。建议配置为4核8G。如果使用Forge模组端由于模组对内存的占用通常更大可能需要考虑4核16G。50人以上中大型服务器这类服务器往往有复杂的插件体系或大型模组包同时在线玩家多对TPS每秒刻数可理解为服务器运行流畅度要求极高。需要高性能的CPU主频高、缓存大和充足的内存。建议配置从8核16G起步并根据实际表现进行升级。磁盘建议使用高性能的ESSD云盘以加快世界加载和存档速度。注意阿里云ECS的“核”指的是vCPU是物理CPU超线程后的虚拟核心。对于MC这种重度依赖单线程性能的应用选择计算型c系列或通用型g系列实例通常比均衡型更合适因为它们提供了更好的单核计算能力。2.2 阿里云ECS实例与镜像选择在阿里云控制台创建ECS实例时有几个关键选择点地域与可用区选择离你和你的主要玩家群体地理位置最近的地域可以显著降低网络延迟。例如玩家主要在华东就选择“华东1杭州”或“华东2上海”。实例规格根据上述分析进行选择。对于MC服务器一个性价比很高的入门选择是ecs.g6.large2核8G或ecs.c6.large2核4G计算型。对于社区服可以考虑ecs.g6.xlarge4核16G。镜像这是影响我们后续操作复杂度的关键。强烈推荐选择“Alibaba Cloud Linux”或“CentOS”的最新稳定版镜像如Alibaba Cloud Linux 3/ CentOS 7.9。这两个系统都是企业级Linux发行版文档丰富、稳定性高且与阿里云生态兼容性最好。不推荐选择Windows Server镜像虽然图形化操作看似简单但会占用大量不必要的系统资源且不利于远程脚本化运维。系统盘至少选择40GB以上的高效云盘或ESSD云盘。MC世界文件会随着探索不断增大预留充足空间是必要的。公网IP务必勾选“分配公网IPv4地址”。这是你的服务器被外界访问的入口。带宽方面初期选择按使用流量计费峰值带宽设为3-5 Mbps通常足够。因为MC传输的主要是游戏指令和区块数据流量消耗并不大按流量计费在玩家不多时非常划算。2.3 安全组配置第一道防火墙安全组是云端虚拟防火墙错误配置是导致“Connection Reset”等连接问题的罪魁祸首。创建实例时系统会提示配置安全组请务必放行以下端口TCP: 25565这是《我的世界》Java版服务器的默认端口。必须放行。TCP: 22用于SSH远程连接管理服务器。必须放行但建议后期将源IP限制为你自己的固定IP以提高安全性。ICMP用于Ping测试方便排查网络问题建议放行。在安全组规则中将授权对象设置为0.0.0.0/0意味着对所有IP开放。对于25565端口这是必须的对于22端口在生产环境中强烈建议后期改为你自己的公网IP地址段例如你的IP/32。3. 服务器基础环境准备拿到ECS实例的公网IP和登录密码后我们首先需要通过SSH连接到服务器并进行一系列基础配置。3.1 远程连接与系统更新使用SSH客户端如Windows下的PuTTY、Xshell 或Mac/Linux下的终端连接你的服务器。ssh root你的公网IP输入创建实例时设置的密码首次登录会提示修改密码。登录成功后第一件事是更新系统软件包并安装一些必要的工具。# 对于 Alibaba Cloud Linux 或 CentOS 8 sudo yum update -y sudo yum install -y wget curl vim git java-17-openjdk-devel # 对于 CentOS 7 sudo yum update -y sudo yum install -y wget curl vim git java-17-openjdk-devel这里我们直接安装了Java 17。目前主流的MC服务端1.18及以上版本基本都要求Java 17或更高版本。你可以通过java -version命令验证安装是否成功。3.2 创建专用用户与目录不建议直接使用root用户运行游戏服务端。创建一个专用用户是更安全、更规范的做法。# 添加一个名为mc的用户 sudo adduser mc # 为mc用户设置密码 sudo passwd mc # 切换到mc用户的家目录并创建服务器文件目录 sudo su - mc mkdir ~/minecraft_server cd ~/minecraft_server所有后续的服务器文件都将放置在/home/mc/minecraft_server目录下这样逻辑清晰也便于备份。3.3 优化系统参数为了支持MC服务器可能的高连接数和文件操作需要调整一些Linux系统限制。编辑系统限制配置文件sudo vim /etc/security/limits.conf在文件末尾添加* soft nofile 65536 * hard nofile 65536 mc soft nofile 65536 mc hard nofile 65536这提高了最大文件打开数。编辑sysctl配置以优化网络性能sudo vim /etc/sysctl.conf添加或修改以下参数net.ipv4.tcp_tw_reuse 1 net.ipv4.ip_local_port_range 1024 65000 net.ipv4.tcp_fin_timeout 30 net.core.somaxconn 1024保存后执行sudo sysctl -p使配置生效。这些调整有助于处理更多的TCP连接减少“Connection Reset”类错误的发生概率。4. 服务端核心部署与配置这是搭建过程中最核心的一步选择什么样的服务端软件直接决定了服务器的性能、功能和兼容性。4.1 服务端软件选型Vanilla, Paper, Spigot, Forge?原版服务端 (Vanilla)从官网下载的官方服务端。最纯净兼容性100%但性能最差缺乏优化和插件支持。仅适合极简的原版体验。Paper当前绝大多数生存、小游戏服务器的首选。它基于Spigot进行了大量深度的性能优化如异步区块加载、实体AI优化显著提升了TPS和玩家容量同时完全兼容Spigot的插件生态。如果你打算安装插件Paper是最推荐的选择。SpigotBukkit的继承者拥有庞大的插件市场。但原生性能优化不如Paper。目前其地位逐渐被Paper取代。Forge / Fabric模组Mod服务端。如果你和朋友们想玩“整合包”体验各种魔改内容就必须选择它们。Forge生态更庞大Fabric相对更轻量、更新快。它们不兼容Bukkit/Spigot/Paper的插件。对于本文我们以最流行的Paper服务端为例进行部署。它将为我们提供一个高性能、可插件化的基础。4.2 下载与部署Paper服务端首先访问 PaperMC官网 找到你想要的服务端版本例如对应游戏版本1.20.4。我们可以直接在服务器上用wget下载。# 确保在 /home/mc/minecraft_server 目录下 cd /home/mc/minecraft_server # 从PaperMC的API获取最新构建版本下载链接以1.20.4为例 # 你可以手动从官网复制下载链接这样更稳定 wget https://api.papermc.io/v2/projects/paper/versions/1.20.4/builds/112/downloads/paper-1.20.4-112.jar -O paper.jar下载完成后我们需要编写一个启动脚本这是高效管理服务器的关键。4.3 编写智能启动脚本直接使用java -jar paper.jar启动非常不灵活无法方便地设置JVM参数。创建一个启动脚本start.shvim start.sh将以下内容粘贴进去并根据你的服务器配置进行关键修改#!/bin/bash # Minecraft Server启动脚本 # 切换到服务器目录 cd /home/mc/minecraft_server # 设置JVM参数 - 这是性能优化的核心 # -Xms 和 -Xmx 设置最小和最大堆内存。通常设置为相同值以避免运行时调整开销。 # 对于2核4G的ECS分配给MC 2-3G内存是合理的。例如-Xms2G -Xmx2G # 对于4核8G的ECS可以分配4-6G。例如-Xms4G -Xmx4G # 使用G1垃圾回收器适合大内存、低延迟要求的应用。 # Aikar‘s Flags 是一套被社区广泛认可的优化JVM参数能有效减少GC卡顿。 JAVA_OPTS-Xms4G -Xmx4G -XX:UseG1GC -XX:ParallelRefProcEnabled -XX:MaxGCPauseMillis200 -XX:UnlockExperimentalVMOptions -XX:DisableExplicitGC -XX:AlwaysPreTouch -XX:G1NewSizePercent30 -XX:G1MaxNewSizePercent40 -XX:G1HeapRegionSize8M -XX:G1ReservePercent20 -XX:G1HeapWastePercent5 -XX:G1MixedGCCountTarget4 -XX:InitiatingHeapOccupancyPercent15 -XX:G1MixedGCLiveThresholdPercent90 -XX:G1RSetUpdatingPauseTimePercent5 -XX:SurvivorRatio32 -XX:PerfDisableSharedMem -XX:MaxTenuringThreshold1 -Dusing.aikars.flagshttps://mcflags.emc.gs -Daikars.new.flagstrue # 服务器核心Jar文件名 SERVER_JARpaper.jar # 启动命令 java $JAVA_OPTS -jar $SERVER_JAR --nogui实操心得-Xms和-Xmx务必设置成相同的值。这能避免JVM在运行时动态调整堆大小从而引起不必要的性能波动和内存碎片。-XX:AlwaysPreTouch参数会在启动时接触所有内存页虽然让启动慢了几秒但能避免游戏运行时因分配物理内存而产生的轻微卡顿。给脚本添加执行权限并首次运行chmod x start.sh ./start.sh首次运行会失败因为需要同意EULA最终用户许可协议。脚本退出后你会看到目录下生成了eula.txt文件。vim eula.txt将eulafalse改为eulatrue保存退出。4.4 基础服务端配置再次运行./start.sh服务端会正常启动并生成默认的server.properties配置文件。让服务器运行一会儿后使用stop命令停止它。现在我们来配置server.properties这是服务器的全局设置文件。vim server.properties需要关注的关键配置项server-port25565服务器端口保持默认即可需与安全组放行端口一致。server-ip此处留空让服务器监听所有网络接口。如果填写了公网IP反而可能导致无法连接。online-modetrue正版验证。设为true时只有拥有正版Minecraft账户的玩家才能加入。如果希望离线玩家或使用皮肤站也能加入需设为false并配合插件如AuthMe进行离线验证。注意设为false可能存在安全风险。max-players20最大在线玩家数。根据你的服务器性能设置不宜过高。view-distance10玩家视距。这是性能杀手视距越大服务器需要为每个玩家加载和计算的区块就呈指数级增长。对于中小型服务器建议设置为6-10。降低视距是提升TPS最有效的手段之一。simulation-distance10模拟距离1.18。控制哪些区块内的实体会被更新如怪物移动、作物生长。同样建议设置为6-10与视距保持一致或略低。motdA Minecraft Server on Aliyun ECS服务器描述玩家在服务器列表里看到的标题。可以写点有趣的。配置完成后保存退出。5. 服务器高级管理与优化一个稳定的服务器离不开持续的管理和优化。我们将配置一些自动化工具和性能监控手段。5.1 使用Screen或Tmux进行会话管理如果我们直接在前台运行./start.sh关闭SSH窗口后进程也会终止。我们需要一个工具来让服务端在后台持续运行。方案一使用Screen简单易用# 安装screen sudo yum install -y screen # 以mc用户身份创建一个名为mcserver的screen会话并启动服务器 sudo su - mc cd minecraft_server screen -S mcserver ./start.sh此时服务器已在screen会话中启动。按下CtrlA然后按D键可以分离detach当前会话让服务器在后台运行。想重新连接管理时执行screen -r mcserver。方案二使用Systemd服务更规范推荐这是将MC服务器作为系统服务管理的专业方式可以实现开机自启、自动重启、日志管理。创建服务文件sudo vim /etc/systemd/system/minecraft.service写入以下内容注意修改路径和用户[Unit] DescriptionMinecraft Server Afternetwork.target [Service] Typesimple Usermc WorkingDirectory/home/mc/minecraft_server ExecStart/usr/bin/java -Xms4G -Xmx4G -XX:UseG1GC -XX:ParallelRefProcEnabled -XX:MaxGCPauseMillis200 -XX:UnlockExperimentalVMOptions -XX:DisableExplicitGC -XX:AlwaysPreTouch -XX:G1NewSizePercent30 -XX:G1MaxNewSizePercent40 -XX:G1HeapRegionSize8M -XX:G1ReservePercent20 -XX:G1HeapWastePercent5 -XX:G1MixedGCCountTarget4 -XX:InitiatingHeapOccupancyPercent15 -XX:G1MixedGCLiveThresholdPercent90 -XX:G1RSetUpdatingPauseTimePercent5 -XX:SurvivorRatio32 -XX:PerfDisableSharedMem -XX:MaxTenuringThreshold1 -jar paper.jar --nogui Restarton-failure RestartSec10 [Install] WantedBymulti-user.target启用并启动服务sudo systemctl daemon-reload sudo systemctl enable minecraft.service sudo systemctl start minecraft.service现在你可以使用sudo systemctl status minecraft.service查看状态使用sudo journalctl -u minecraft.service -f实时查看日志。服务器会在系统重启后自动启动。5.2 性能监控与日志分析服务器运行是否健康TPS每秒刻数是多少内存使用情况如何我们需要一些手段来监控。内置Timings报告Paper服务端提供了强大的性能分析工具。在游戏内OP玩家执行命令/timings on开始记录运行一段时间后执行/timings paste会生成一个在线报告链接里面详细列出了所有插件、实体、区块加载的耗时是性能瓶颈排查的神器。使用Spark Profiler这是一个更轻量、更现代的性能分析插件。将Spark的jar文件放入plugins文件夹重启服务器后任何玩家都可以通过/spark命令生成性能报告无需OP权限。系统级监控在ECS服务器上可以使用top或htop命令查看Java进程的CPU和内存占用。使用df -h查看磁盘空间。阿里云控制台也提供了丰富的云监控图表可以观察实例的CPU使用率、网络流量和磁盘IOPS。5.3 世界备份与恢复策略服务器世界是心血结晶定期备份至关重要。我们可以编写一个简单的Shell脚本配合Cron定时任务实现自动化备份。创建备份脚本backup.shvim /home/mc/minecraft_server/backup.sh#!/bin/bash BACKUP_DIR/home/mc/backups SERVER_DIR/home/mc/minecraft_server WORLD_NAMEworld # 如果你的主世界文件夹名是其他请修改 DATE$(date %Y%m%d-%H%M%S) # 创建备份目录 mkdir -p $BACKUP_DIR # 进入服务器目录执行存档保存确保所有数据写入磁盘 cd $SERVER_DIR screen -S mcserver -X stuff save-all\n sleep 5 screen -S mcserver -X stuff say 正在进行每日备份可能会略有卡顿...\n # 打包世界文件夹 tar -czf $BACKUP_DIR/world-backup-$DATE.tar.gz $WORLD_NAME # 可选同时备份插件配置等 tar -czf $BACKUP_DIR/server-backup-$DATE.tar.gz --exclude$WORLD_NAME --exclude*.jar . # 删除7天前的旧备份以节省空间 find $BACKUP_DIR -name *.tar.gz -mtime 7 -delete echo Backup completed at $DATE给脚本加权限chmod x /home/mc/minecraft_server/backup.sh添加每日凌晨3点执行的Cron任务以mc用户身份crontab -e添加一行0 3 * * * /home/mc/minecraft_server/backup.sh /home/mc/backup.log 21这样每天凌晨3点服务器会自动保存并打包世界并保留最近7天的备份。6. 常见问题排查与实战技巧即使按照步骤操作在实际运行中也可能遇到各种问题。这里汇总了一些典型问题的排查思路。6.1 连接类问题问题现象可能原因排查步骤无法连接提示“Connection timed out: No further information”1. 安全组未放行25565端口。2. 服务器防火墙如firewalld, iptables阻止了端口。3. 服务器进程未运行。1. 检查阿里云控制台安全组规则。2. 在服务器执行sudo firewall-cmd --list-all(firewalld) 或sudo iptables -L -n查看规则。可临时关闭防火墙测试sudo systemctl stop firewalld。3. 执行sudo systemctl status minecraft或screen -r mcserver查看服务状态。连接被拒绝提示“Connection refused”服务器未在指定端口监听。1. 确认服务器IP和端口正确。2. 在服务器执行 netstat -tlnp连接成功但立即断开提示“Internal Exception: java.net.SocketException: Connection reset”1. 客户端与服务端版本不匹配。2. 服务器内存不足或GC垃圾回收导致长时间卡顿。3. 网络不稳定丢包严重。4. 某些插件或模组冲突。1. 确认客户端和服务端游戏版本一致。2. 检查服务器内存使用top优化JVM参数适当增加-Xmx值。3. 从客户端ping服务器IP看延迟和丢包率。4. 尝试以纯净模式不加载插件/模组启动服务器测试。提示“Failed to verify username!”或“Invalid Session”1.server.properties中online-modetrue但客户端未登录正版账号或登录状态失效。2. 服务器系统时间不同步。1. 确认客户端已登录正版Mojang/Microsoft账户。或考虑将online-mode设为false需知悉风险。2. 在服务器执行date查看时间使用sudo ntpdate time.windows.com同步时间。6.2 性能与卡顿问题TPS持续低下低于18首要原因视距/模拟距离过高。立即检查并降低server.properties中的view-distance和simulation-distance到8或10。实体过多使用命令/minecraft:kill e[type!player]清除所有非玩家实体小心使用。安装插件如ClearLag来定期清理。红石机械或高频电路寻找并拆除或优化大型红石机器。使用Timings/Spark分析找出最耗时的插件或事件。服务器内存占用高频繁Full GC检查JVM参数确保-Xmx设置合理不要超过物理内存的70-80%为操作系统和其他进程留出空间。确认使用了G1垃圾回收器及相关优化参数如前文Aikar‘s Flags。使用jstat -gc pid 1000命令观察GC情况如果Full GCFGC次数增长很快说明可能存在内存泄漏某个插件引起。6.3 日常运维技巧优雅关闭服务器永远不要直接使用kill -9强制结束Java进程。应在游戏内使用/stop命令或在screen会话中按CtrlC或通过systemd执行sudo systemctl stop minecraft。这会给服务器时间保存所有数据避免世界文件损坏。玩家管理将常驻玩家或管理员添加到ops.jsonOP列表或whitelist.json白名单。白名单是防止陌生人涌入的有效手段在server.properties中设置white-listtrue后启用。插件安装将下载的.jar插件文件放入plugins文件夹重启服务器即可。务必从官方来源如SpigotMC, Hangar下载插件并注意插件版本与服务器核心的兼容性。安装新插件前最好在测试环境先试运行。日志查看logs/latest.log是最新的运行日志。遇到崩溃时查看logs目录下以日期命名的日志文件或crash-reports目录下的崩溃报告里面通常包含了详细的错误堆栈信息是解决问题的关键线索。搭建并维护一个MC服务器就像经营一个小型在线社区既有技术上的挑战也有管理的乐趣。从最初的ECS选型、系统配置到服务端调优、插件管理再到日常的监控备份和故障排查每一个环节都需要耐心和细心。当你看到朋友们在自己搭建的世界里畅玩时那种成就感是无可替代的。希望这份详尽的指南能帮你扫清障碍顺利开启你的云端方块世界之旅。如果在实践中遇到上面没覆盖的特定问题多利用服务器日志和社区资源如MCBBS、相关插件Wiki大部分难题都能找到解决方案。
返回列表