本文章介绍的是架设Java版服务器。关于基岩版服务器的架设,请见“
教程/架设基岩版服务器”。
创新互联公司服务项目包括金秀网站建设、金秀网站制作、金秀网页制作以及金秀网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,金秀网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到金秀省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
此特性为Java版独有。
本教程将通过手把手的方式,一步步地帮助你建立属于你自己的Java版服务器。在该教程中,我们使用Mojang发布的供玩家免费下载的服务器端程序,该程序在大部分操作系统(比如Windows、Mac OS、GNU/Linux和BSD)上都可以运行。
如需查看更多教程,请查看此页面底部或教程页。更多有关Minecraft服务器的信息,参见服务器。
注意:
x.x.x.x:端口
。注: 也有一些其他的定制服务器软件,大部分大型服务器都使用这些软件,但是这些软件并不受Mojang官方支持。
注意
如果你对自己所做的事情没有清楚的认知,那么在自己的电脑上运行服务器软件会导致你的电脑更容易受到来自外部网络的非法人士或有害程序(例如黑客和病毒)的攻击。因此,请谨慎使用服务器软件。
鉴于你正在一步步地开启你自己的服务器,你应该要注意所有可能出现的危险性。运行下面的所有教程(应该)不会导致你的系统出错,但是由于本wiki是所有人都可编辑的,且我们并不知道你的系统配置与软件运行情况,我们并不能保证你的系统不会出现问题。
为了确保你根据下面的教程架设服务器而不会出现问题,我们强烈推荐你至少要知道以下的内容:
Java是一种静态类型的编程语言,用于编写在Java虚拟机(JVM)上运行的程序。JVM支持很多种不同的平台。为了做到这一点,开发者为JVM编写代码,而所有被JVM支持的平台都能运行这样的程序。进一步了解
此章节用于回答一些经常被问到的关于Java的问题,也会指导你作出有关Java的决定。
OpenJDK与OracleJDK非常相似。OpenJDK是对Java的一种官方的开源参考实现。OpenJDK是一个开源代码库,几乎所有其他JDK都基于此构建。除了打包方式、许可证和一些表面上的差别外,OpenJDK与OracleJDK是一样的。
请注意:如果用于商业和生产用途,OracleJDK的OTN(Oracle技术网络)构建版本就需要一份付费的订阅才能使用。这似乎包含了运行Minecraft服务器的情况,即便是非盈利目的的。Oracle会提供他们自己的OpenJDK构建版,但是不会打包成那种易于安装的安装包格式。
JRE指的是“Java运行环境”。JDK指的是“Java开发工具包”。JRE被设计用来运行Java程序,而JDK则是被设计用来开发Java程序的。JDK中包含了JRE,而JRE中包含了JVM。这意味着如果你已经有了JDK,那样也同时有了JRE和JVM。原版Minecraft不需要JDK,但是有一些插件可能需要。
无头Java实际上是普通Java的删减版。它去除了对图形界面或鼠标、键盘方面的支持。无头Java通常被用在服务器或其他不需要图形界面的场合。
“
在Debian上,有几种Java虚拟软件包被使用。这些软件包都支持Java运行环境,且具有以下两种类型:无头的(没有图形界面)以及普通的。
” ——
Debian Wiki(译文)
运行Minecraft服务器的基本步骤是:安装java
,运行服务器,接受EULA,然后再运行一次。当你安装了java
并打开命令行后,后续的内容基本上都是一致的。
java -version
就可以。cd
(切换工作目录),切换到你存放服务端jar文件的文件夹中。如果你打开了一个图形界面,也可以把这个文件夹拖动到终端窗口中。java -jar minecraft_server.jar --nogui
用来首次启动服务器(如果你的jar文件名不是“minecraft_server.jar”,把它换成实际的文件名即可)。eula.txt
。使用文本编辑器(如记事本)打开eula.txt
,将文件中的eula=false
改为eula=true
。这表示你已阅读并理解了EULA的内容,并会在使用服务端时遵守它。如果不这样做,服务器会在你尝试启动时立即关闭。java -jar minecraft_server.jar
启动服务器了。如果你不想让服务器显示图形界面,在前面的命令后面添上一个空格和--nogui
即可(有些人觉得这样做会让服务器更快)。你也可以使用下面所列出的一些选项。现在,你应该已经启动了一个基本的服务器了。更多关于配置服务器的内容,参见配置环境。关于如何编写启动脚本的内容,参见编写脚本用于启动服务器。
命令行中,Java选项应该添加在-jar
选项之前。
-Xmx
选项设置服务器能被允许使用的内存量。通常-Xmx2G
(最大内存2GB)就已经够用了。
-Xms
(初始化内存大小)不会对长时间运行有性能上的影响,但是你也可以设置它。-Xms512M
(512MB)应该够了。-XX:SoftMaxHeapSize=1G
)。JRE将尝试只使用那么多的内存,但如有必要,它将超过-Xmx设置的最大值。 如果你在服务器上运行许多东西,这可能会很有用。-d64
。关于服务端JAR文件的选项要写在命令中的-jar minecraft_server.jar
后面。你可以在后面加上--help
查看所有可以被传递给服务端的参数。下方列出了一些可用的命令行选项。
--bonusChest
--demo
--eraseCache
--forceUpgrade
--help
--initSettings
server.properties
和eula.txt
,然后退出。--nogui
nogui
与此选项作用相同,主要用于向后兼容非常旧的服务器版本,但更加推荐使用--nogui
更可取,因为这与其他选项的格式匹配--port <整数>
server.properties
中设置的是什么(默认值为-1)。--safeMode
--serverId <字符串>
--singleplayer <字符串>
--universe <字符串>
.
,即当前目录)。--world <字符串>
level.dat
所在文件夹的名称。一些选项能在旧版中使用,但是已在新版本中被移除或被替换了。
-o true
java -Xmx1G -jar minecraft_server.jar --port 1337 --nogui --world cold
。运行Minecraft服务器需要Java运行环境(JRE,或者直接叫Java)。考虑到安全,你应该使用最新版的Java。你可以按照下列方法之一检查是否是最新版:
java -version
。如果显示出了版本号,可以与Java网站上的信息对比获取最新版本号。如果你没有安装Java或你的Java版本较旧,你可以下载OpenJDK或Oracle “OTN” JDK。
请注意:在MacOS 10.4或更老的版本上,服务器不能正常运行,且有可能导致你的机器崩溃。
打开终端。
java -version
来检查你是否安装了Java。并确保其版本高于1.6(比1.8高要更好)。/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
安装HomeBrew。brew cask install adoptopenjdk
安装Java(OpenJDK)。java -version
,这一次应该会看到一些消息了。参见一般步骤。
有些家庭使用的无线路由器是AirPort Time Capsule。此章节教你如何在不搞坏文件服务器的情况下做相应设置。
注:你需要知道你的管理员账户和密码。
你现在可以配置你的服务器了。
Linux有许多被称为“发行版”的变种。有一些发行版是专门为服务器设计的,或更适合运行在服务器上的。如果你正在架设一台专用服务器,我们建议你使用这些发行版中的其中一个。
一般来讲,Linux更欢迎开源软件。因此,在适用的情况下,建议你使用开源程序,例如OpenJDK。
大多数发行版中都有OpenJDK。你可以直接安装。对于Oracle Java,请参考Oracle的下载页。
注:尽管不影响Minecraft服务器,JavaFX以及其他专有部分可能需要单独安装。
执行sudo eopkg install openjdk-8
命令安装OpenJDK。
安装Oracle JDK,请参考Solus帮助中心。
注:OpenJDK 11不在Solus的仓库中。
为了正常使用apt-add-repository
命令,你可能需要“software-properties-common”(使用sudo apt-get install software-properties-common
安装)和/或“python-software-properties”软件包(使用sudo apt-get install python-software-properties
安装)。
由于许可证方面的问题,常用来安装Oracle Java的软件库已经停止维护。推荐你安装OpenJDK 8及更高版本。
OpenJDK可以使用此命令安装:sudo apt update; sudo apt-get install openjdk-8-jdk-headless
去掉命令中的“-headless”可以安装完整的Java。
注:此方法已在Ubuntu 18.04中测试有效。
注:由于openSUSE Tumbleweed可能的不稳定性,不建议使用此系统架设专用服务器。
在终端内执行命令:sudo zypper in java-1_8_0-openjdk
安装Java。
注:此方法已在openSUSE Leap 15.1中测试有效。
Arch默认提供最新的稳定Java版本。若无特殊需求,建议安装默认版本的Java环境。
运行pacman -S jdk-openjdk
安装Java。
如果希望了解所有可用的Java版本,请运行pacman -Ss openjdk
进行查询,或访问OpenJDK获取更多信息。
例如安装Java 17,请运行pacman -S jdk17-openjdk
。
注:Arch官方不提供无头JDK,只提供无头JRE、完整JRE以及JDK。
如果遇到问题,请参考ArchWiki。
执行emerge --ask virtual/jdk
安装Java。
Gentoo Wiki
查看你使用发行版的文档。它们应该会告诉你如何安装OpenJDK。
另外,你还可以直接访问Java网站下载适用于Linux的安装包。对于大部分发行版都有用(无论32位还是64位)。在网站上提供了不同安装包的安装指导。
如果你在安装的过程中询问了密码,请输入它。如果你被问到“Is this OK [Y/N]”,(如果需要的话)请回答“Y”然后回车。Java现在应该已经安装好了。
https://github.com/silvertriclops/MCSLI
注:这是一个非常早期的项目,设计时考虑了脱机安装,并将定期更新以使其对用户更加友好。
此部分需要更新
Java 7已经过时,因为官方已经使用Java 18了。
一些崩溃问题在OpenJDK 18中不会再出现。
所以如果相关内容测试成功的话,则下文中关于Linux兼容相关的内容应该就可以删掉了。
此部分已在FreeBSD 10.0 amd64上测试有效(JRE使用的是:jre-7u65-linux-i586.tar.gz
)。
由于OpenJDK与Minecraft服务器的性能和崩溃问题,我们会安装为Linux设计的Oracle JRE。
在安装JRE前,你需要安装FreeBSD的Linux二进制文件兼容层,你可以按照此文档操作。
Java需要从proc中获取一些信息。你需要执行以下命令挂载linprocfs:
kldload linprocfs mount -t linprocfs linprocfs /compat/linux/proc
并向/etc/fstab
加入此行:
linprocfs /compat/linux/proc linprocfs rw 0 0
Oracle JRE的一个依赖被标成“禁止”,所以安装这个依赖会失败。切换到/usr/ports/textproc/linux-f10-expat2.0.1/
,然后在其中的Makefile文件中删掉以FORBIDDEN=
开头的一行。
由于许可证问题,你需要从Java官网上手动下载Linux的tar包(例如“jre-7u65-linux-i586.tar.gz”),并把它复制到/usr/ports/distfiles
。 然后,进入/usr/ports/java/linux-sun-jre17/
目录并执行make install distclean
安装JRE。
注:前一部分以前的说法(适用于FreeBSD 9.2 amd64)是:你必须在Makefile文件中设置JRE_UPDATE_VERSION
变量,并将其设置为一个数字(在此例中为45)。然后再执行make install NO_CHECKSUM=1
。
尝试执行java -version
。你可能会被提示找不到libjli.so
。一种解决方法是:将你的Java路径显式指定为搜索路径。 创建一个符号连接:
ln -s /usr/local/linux-sun-jre1.7.0/lib/i386 /compat/linux/usr/lib/java
然后在/compat/linux/etc/ld.so.conf.d/java.conf
添加:
/usr/lib/java /usr/lib/java/jli
执行/compat/linux/sbin/ldconfig
。 现在执行java -version
应该是正常的了。
创建一个文件夹,然后把Minecraft服务端jar文件复制进去。
在实际的版本中,如果你用一般方法运行服务器,你会得到以下异常:syscall epoll_create not implemented
。为了解决这个问题,可以在命令后面加上-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider
。
启动命令示例:
java -Xmx1024M -Xms1024M -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -jar minecraft_server.1.7.10.jar nogui
alien-convert PATH_TO_YOUR_JRE.deb chmod ~/~ rwx # for current user snarf java -jar PATH_TO_SERVER_JAR.jar xvmf in acme
Hostman是用于云托管应用程序的应用程序托管提供商。Minecraft可作为Hostman上的一键式应用程序使用。安装大约需要2分钟,有个关于如何配置服务器并开始游玩的说明。你可以在一台服务器上拥有多个Minecraft服务。在此处免费试用。
Cloudron是一个在服务器上自托管应用程序的平台。在Cloudron上,Minecraft是一个一键应用。它允许你通过浏览器上的Web界面管理Minecraft服务器。你也可以在同一台服务器上安装多个Minecraft实例。你可以尝试此示例(用户名:cloudron,密码:cloudron)。
Docker是一种开源的容器平台,可以使不同的Minecraft服务器实例和主机相互隔离开来。Docker本身和其容器仓库的所有者与Mojang没有任何隶属关系。
参见https://docs.docker.com/install
关于完整的Docker镜像文档,请参见:https://github.com/itzg/docker-minecraft-server/blob/master/README.md。
在一个名为“mc”的容器中运行一个简单的最新版本服务器,可以在shell中执行以下命令:
docker run -d -p 25565:25565 --name mc -e EULA=TRUE itzg/minecraft-server
如果要指定特定的版本,请在命令后添加-e VERSION=
。例如,你可以使用下面的命令指定版本为最新快照:
docker run -d -p 25565:25565 --name mc -e VERSION=SNAPSHOT -e EULA=TRUE itzg/minecraft-server
指定为Minecraft 1.7.9:
docker run -d -p 25565:25565 --name mc -e VERSION=1.7.9 -e EULA=TRUE itzg/minecraft-server
要更改监听的端口,需要用到Docker的端口映射功能。这可以把主机上的指定端口映射到容器的25565端口上。可以使用下面的命令运行一个非25565端口的服务器:
docker run -d -p:25565 --name mc -e EULA=TRUE itzg/minecraft-server
使用下面的命令更新Docker镜像。请注意,此命令不会更新Minecraft,它只会更新镜像本身。
docker pull itzg/minecraft-server
实际上,我们不需要在每次启动服务器的时候输入命令。我们可以把命令写进一个文件里,然后执行它。
在Windows中,脚本称为“批处理文件”。在服务器jar文件所在的文件夹中,创建一个文本文档,命名为start.bat
,然后右键点击“编辑”,再将下面的内容粘贴到里面:
@ECHO OFF java -Xms1024M -Xmx2048M -jar minecraft_server.jar --nogui pause
然后双击这个文件启动你的服务器。你可能会收到“Class_Not_Found”和“ServerGuiConcole”错误信息,直接忽略这些错误。然后你就可以看到“Server Thread/INFO”这样的内容,这表示你的服务器启动了。
脚本中的pause
命令会保持窗口开启,这样是为了让你能在服务器停止时更方便地知道到底发生了什么。
这些系统在命令行中都使用一种被称为“POSIX shell script”的脚本语言。在放服务器jar文件的文件夹中创建一个文本文件,命名为start.sh
,然后写入以下内容:
#!/bin/sh cd "$(dirname "$0")" exec java -Xms1G -Xmx1G -jar server.jar --nogui
然后保存文件。执行chmod a+x start.sh
(或者你放置此脚本的路径)使其可执行。你可以通过双击此文件或者在文件夹中输入./start.sh
(如果在文件夹外,请输入完整路径)命令启动服务器。
如果你想像Windows中一样能在服务器关闭后保留窗口,请删除脚本中的exec
一词,并在末尾加上read -n 1 -p "Waiting..."
一行。此更改对从图形界面双击打开的服务器有效果。
另外,你也可以尝试使用下面列出的脚本实现对Minecraft服务器的管理和启动、关闭自动化:
参见: 端口转发
如果你有一台路由器,并且想让用户通过路由器连接进来时,就需要使用端口转发。如果你只是想架设一台内部服务器,那么你就不需要做这样的事。请注意:端口转发可能会导致安全风险。
不同路由器设置端口转发的方式不同。如果你不知道如何在你的路由器设置端口转发,可以尝试在网络上找适用于你路由器型号的教程。
此示例适用于TP-Link家庭路由器的新版界面。
进入你路由器的管理界面,找到端口转发页,然后点击新建服务或自定义服务。选择一个“协议类型”,“TCP”表示只转发TCP协议,“UDP”只转发UDP协议,而“ALL”则两者都转发。内部端口和外部端口都填写25565(如果你服务器不是标准端口,可以按需填写)。IP地址则填写你Minecraft服务器的内部IP地址,其余保持不变即可。
要获取你电脑的IP地址,请按以下步骤操作:
cmd
然后 ↵ Enter,打开命令提示符。在命令提示符中输入ipconfig
然后 ↵ Enter。找到对应你使用的网络适配器上的IPv4地址(有线连接的一般是“以太网”,无线连接的一般是“WLAN”)。一个IP地址的形式应该是xxx.xxx.xxx.xxx
,然后把这样的内容记录下来。OS X上IP地址的显示位置
ifconfig
,此命令会输出你所有网络接口的IP地址,找到例如inet addr:xxx.xxx.xxx.xxx
的内容,将xxx.xxx.xxx.xxx的部分复制下来即可。
如果你获得了你的IP地址,请把它输入到前面转发设置中的“IP地址”中。 填写好这些需要的信息后,请点击“保存”(或者其他类似意思的按钮)。这样你就成功的设置了端口转发。当你启动Minecraft服务器时,需要把server.properties
中的IP地址一项留空。 其他人需要通过你的外部IP地址来连接到你的服务器。你可以通过例如IP Chicken的网站获取外部IP地址。如果你不想用IP地址连接,可以使用动态DNS服务,例如NoIP DynDNS。
接下来可以配置并连接了。
该段落的内容不代表Mojang Studios或Minecraft Wiki的官方意见。
注意
使用虚拟专用网络可能对连接至Mojang服务器,Minecraft服务器,或者你的互联网造成影响。
在你和你的朋友之间设置服务器的另一种方法是设置虚拟专用网络。由于希望连接到服务器的所有用户必须下载外部软件以加入或创建服务器,因此该方法可能会被认为是不推荐而且不方便的。另外一种可行的办法是端口转发。可用于建立虚拟专用网络的免费简单程序是Hamachi和Radmin虚拟专用网络。这是另外一种免费开源且支持大多数操作系统的方案,但是配置较困难。Hamachi免费版只允许5个玩家连接。
.deb
和.rpm
包均可找到。欲在 Gentoo 上安装,使用net-misc/logmein-hamachi
)其配置方法和Hamachi的很相像。
server.properties
文件(格式可参见server.properties#server.properties)。请使用纯文本编辑器修改此文件(例如记事本)。可能不需要做额外配置,默认生成的内容也可以启动服务器。/op <玩家或玩家实体目标选择器>
命令。此命令会把你指定的用户的UUID添加到ops.json
文件中。管理员权限不会随着用户名的更改而消失,因为存储的是你的UUID而不是用户名。
ops.json
的内容:[ { "uuid": "", "name": "", "level": 4, "bypassesPlayerLimit": false } ]
/whitelist add <玩家或玩家实体目标选择器>
命令把玩家添加进whitelist.json
文件中(由于过渡到UUID系统的原因,不建议直接修改此文件的内容)。192.168.0.168:25565
这样。localhost
)、内网IP地址(例如192.168.x.x
)或者公网IP都是可以的。服务器有可能会遭到恶意攻击,在服务器投入使用以前,请务必做好物理保护及数据备份工作,否则有可能会带来经济及精神上的损失。
这种情况,你可以使用内网穿透类应用,如花生壳,或协商运营商请求许可获取公网IP的资格。
使用动态DNS需要一定网络理论及实践的基础,新手在做出决定前,请先咨询熟悉的业内人士。
这一段的内容只适用于Classic(v0.30)服务器。
管理员不能在内网中通过一台另一台机器进入那台架设了服务器的机器,这是一个普遍性的问题。典型的情景是:你有一台专用服务器,而且有另一台供你玩游戏的机器。而它们同时连接到同一个路由器或交换机下,且内部IP为“192.168.x.x”。通常,通过服务器生成的URL连接时,会返回“服务器离线”的错误信息。
要解决这个问题,你需要在你的URL、书签以及其他你用来连接的东西后面加上?override=true
例如:http://www.minecraft.net/classic/play/4c3bebb1a01816acbe31c5ece1570da5?override=true
以前(1.8 beta和网站更新前)上面要加的东西是&override=true
。这一点并没有被Mojang在网站Applet页面上说明,导致出现了很多误用。在此更新前,通过网站连接到你自己的URL会导致出现在Applet窗口底部出现“If you can't connect, try this link instead.”的红色文字,返回的是同样以“&override=true
”结尾的连接。
注:Beta服务器没有这样的情况,你应该能通过内部或外部IP连接上服务器。
从Java版1.3开始支持玩家可以在不输入端口号的情况下连接到一个使用非标准端口号的服务器。相关的信息是作为一种服务被记录在DNS上的SRV记录中的。SRV记录告知客户端实际上应该连接的主机名和端口。一些动态DNS(DDNS)服务和大多数的静态DNS服务都会允许你设置这样的记录。[1]
如果你要手动验证SRV记录是否生效,请参考下面的内容(假设给玩家的域名是“YOUR.DOMAIN.com”):
> nslookup -q=srv _minecraft._tcp.YOUR.DOMAIN.com Server: UnKnown Address: [REDACTED] Non-authoritative answer: _minecraft._tcp.YOUR.DOMAIN.com SRV service location: priority = 5 weight = 5 port = 65312 svr hostname = ACTUAL.DOMAIN.com
问:如果我有一个没在这里提到的问题,我应该怎么办?
答:你可以在Minecraft Forums上发帖说明你的问题。为了能帮到你,请提供以下信息:
如果我们解决了你的问题,请说明具体解决问题的地方和方法。这可以对其他人有所帮助(也能帮我们解决常见问题)!
问:在Windows上双击批处理文件启动服务器,命令提示符窗口闪退且服务器没有启动。
答:请在你的批处理文件最后加上pause
再运行。如果显示的是无效路径,这可能是你Java可执行文件或者服务端jar文件的路径不正确导致的。把批处理文件路径里的/jre7/换成/jre6/,确定运行环境在/Program Files/里还是在/Program Files (x86)/里,或者根据自己电脑的情况对路径进行相应调整。多说一句,运行服务端需要JRE运行环境,而不是浏览器里的Java插件。
也可能是你没有修改你的eula.txt文件。在双击你的minecraft_sever.jar文件后,你会看到文件夹内有个eula.txt文件。用记事本打开这个文件
(https://account.mojang.com/documents/minecraft_eula). Datum Uhrzeit eula=false
将最后一行修改为
eula=true
然后保存并退出。重新双击服务器启动的批处理文件应该就可以正常启动了。
问:当我尝试启动服务器时,服务器显示"Failed to bind to port!"。
答:可能是路由器端口映射设置有误,确认路由器为Minecraft开放的端口(默认为25565)正确地映射到你的服务器上。如果你的服务器是直接接入网络的且网络服务商不开放你所设置的端口,将server.properties
文件中的server-port=25565
中的“25565”改为其他可用端口号。
或者是你在server.properties文件中的IP地址一项中设置了IP地址。如果这个IP地址不与你系统上任何接口上的地址一致,服务端会显示这样的信息。如果把此项留空,你就可以在所有接口上绑定。这样,你和内网内的人就可以通过localhost或内网IP地址连接到服务器了。
此外,问题也可能是由于你尝试使用一个已被占用或无权限绑定的端口(小于1024的端口需要root或管理员特权才能使用)导致的。要解决这个问题,你可以尝试修改server.properties
文件中的server-port=25565
一行。
注:你应该避免使用下列端口,这些端口在有些ISP那里是被封禁的。并且,为了安全考虑,最好不要用root用户运行服务器(适用于Linux系统且端口小于1024的情况):
一般要避免使用端口号低于1024的端口,因为这些端口是“公认端口”,用于在IANA处注册的重要服务;另外因为安全原因,一些网络服务商还会屏蔽3306(MySQL服务器默认使用)端口等。除此之外,49152-65535段端口属于“动态端口”范围,没有被注册占用。
此类问题亦有可能是操作者疏忽导致服务端未关闭就再次开启了服务端,典型的错误操作有:Windows中直接双击了核心jar,Linux中使用守护进程运行Java等,导致服务端在后台运行而操作者未注意的情况。遇到此类问题可先检查占用该端口的进程,获取控制或将其结束,再启动服务端。
问:我尝试在Solaris/OpenSolaris上运行服务器,但是出现了以下错误:
java.io.InterruptedIOException: Operation interrupted at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.net.SocketInputStream.read(SocketInputStream.java:182) at java.io.FilterInputStream.read(FilterInputStream.java:66) at gq.a(SourceFile:131) at ji.g(SourceFile:197) at ji.c(SourceFile:17) at oq.run(SourceFile:84) 2011-05-31 16:57:26 [INFO] /:44673 lost connection
答:只有Solaris系统在线程中断连接时会发生这种异常,这种异常可以通过改变启动命令来避免:
java -Xmx1G -Xms32M -XX:-UseVMInterruptibleIO -XX:+UseConcMarkSweepGC \ -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts\ -jar minecraft.jar nogui
这样的命令让Java使用一种可中断的IO栈来防止异常发生。
问:当我尝试连接到我的服务器上,服务器显示:
Connection lost The server responded with an invalid server key
答:此错误通常在服务端发送了一个客户端不能识别的功能时出现,这可能是由于使用了不能识别的服务器软件、不平衡的客户端/服务器版本或修改过的客户端导致的。
问:为什么我不能破坏或放置方块!?
答:联系服主关闭保护出生点的功能,或离出生点远一些,除非你是服务器的op,否则在该功能开启时你不能在出生点附近放置或破坏方块。
问:我的服务器运行正常,但是我不能连接上去!
答:这可能是由一连串问题导致的。请按照上方提供的模板发帖询问。
问:如何给服务器更多内存?
答:修改启动命令行中的“-Xmx1G -Xms1G”部分中的数字。“-Xms”部分指定的是服务器启动时使用的内存量,而“-Xmx”部分指定的是服务器最大可以使用的内存量。 -Xmx1G -Xms2G
= 1GB -Xmx2G -Xms1G
= 2GB 等等。
问:为什么服务器CPU经常满载?
答:这可能是由于GUI(图形界面)窗口导致的。在启动命令行加入nogui
可以禁用这个窗口。
问:我要怎么获取服务器的IP地址?
答:请参阅连接到Minecraft服务器一节。
问:我设置了端口转发,并且允许java.exe通过防火墙,但仍然不起作用!
答:你的调制解调器有可能运行在路由模式下。你可能会从ISP处拿到调制解调器和路由器二合一的设备。 要验证这一点,请查看你路由器上显示的WAN IP,如果这个IP是一个私有IP,那么你需要登陆到ISP提供给你的调制解调器的管理界面,然后把端口转发中的IP地址设置为你路由器的WAN IP。
对于各类JDK(Oracle或Open)用户,使用JDK的一些参数进行优化是可行的。以下参数在一定程度上优化了GC内存操作且利用了一些CPU命令集。
java -server -XX:-UseVMInterruptibleIO -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+CMSParallelRemarkEnabled -XX:MaxGCPauseMillis=50 -XX:+UseAdaptiveGCBoundary -XX:-UseGCOverheadLimit -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -Xnoclassgc -oss4M -ss4M -XX:CMSInitiatingOccupancyFraction=60 -XX:SoftRefLRUPolicyMSPerMB=2048 -Xms(视情况) -Xmx(视情况) -jarnogui
因为从1.17开始不支持Java 8,而在高版本Java上,上面的许多参数都被删除,暂时没有替代品,故可以使用以下参数:
java -jar -Xms(视情况) -Xmx(视情况) -server -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32Mnogui
如果上述两个用例都报错的话,可以使用服务端所属版本的官方客户端参数,此参数可以在编辑“配置”界面上的“JVM参数”中找到,然后使用以下参数:
java -jar -Xms(视情况) -Xmx(视情况) -server <在官方启动器中获得的参数>nogui
这里给出了一些其他的Minecraft服务器架设教程:
教程(作下划线标记的教程为中文独有教程) |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|