0%

mc服务器维护

开服

在ubuntu上启动一个所有人可进的游戏java版mc服务器

  • 自行安装jdk

ubuntu安装java很简单:

1
sudo apt-get install openjdk-14-jdk

多个java同时存在,切换当前的java环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
jxl@jxl-Inspiron-5580:~/下载$ sudo update-alternatives --config java
有 2 个候选项可用于替换 java (提供 /usr/bin/java)。

选择 路径 优先级 状态
------------------------------------------------------------
0 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 自动模式
* 1 /opt/jdk/jdk1.8.0_311/bin/java 100 手动模式
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:0
update-alternatives: 使用 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 来在自动模式中提供 /usr/bin/java (java)
jxl@jxl-Inspiron-5580:~/下载$ java -showversion
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~18.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

如果是windows,到各种镜像站找到jdk或openjdk的.exe安装包,一路确认;或者直接复制别人Program Files/java/下的对应版本的java文件夹到自己电脑这边。在脚本里直接指定java.exe所在的绝对路径就可以轻松区别java版本。

  • 初次运行
    -Xms后面是最小的内存,-Xmx 是最大的内存,这里大家可以根据自己的服务器配置而定。

    1
    java -Xms1G -Xmx1G -jar server.jar nogui
  • 上一次运行后会生成eula.txt,修改它,即同意条款

    1
    vim eula.txt
  • 再次运行

    1
    java -jar -Xms512M -Xmx2048M server.jar nogui
  • 上一次运行后会生成server.properties等文件
    把server.properties中的正版验证online-mode修改为false,这样非正版玩家都可以进入了。

  • 加装forge(可选)
    forge是加装在原版上的一个接口,用户连接原版服务器(或客户端)和mods。官网有两种forge提供:低版本的mc可以下载universal版本的forge,所有版本都有installer版的forge。理论上来说,在ubuntu上运行installer之后会生成universal版本的forge。如果有现成的universal版本,肯定先试一下。但是一般来说没有。
    所以,

    • 在ubuntu上运行forge installer
      将forge文件放入server.jar同目录。然后

      1
      java -jar forge-1.12.2-14.23.4.2705-installer.jar -nogui -serverInstall

      等待一段时间后将产生的forge-1.12.2-14.23.4.2705-universal.jar当作纯净版的server.jar一样重新启动配置一遍即可。

    • 在本机上执行完installer将产生的所有文件整体xftp传到ubuntu
      然后将forge-1.16.5-36.2.30.jar当成之前纯净版的server.jar即可。


假如你已经在windows、ubuntu中用诸如裸开、cloudron、docker成功跑起了服务器。这里整理一些维护常识。

防崩溃

  • 编写简单循环的脚本(start.sh),使服务器崩溃后能自动重启

    1
    2
    3
    4
    5
    6
    7
    ubuntu@VM-16-2-ubuntu:~/mcf16.5$ cat start.sh 
    #!/bin/sh
    while true
    do
    #此处填写启动mc服务器的命令
    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 -Xms512M -Xmx2048M -jar forge-1.16.5-36.2.30.jar nogui
    done
  • windows上循环脚本的写法(假如是在windows上开服的话)

1
2
3
4
5
6
7
:loop

call 服务器启动.cmd

goto loop
pause

防ssh中断后终端被杀

  • 先用screen开启一个分屏
    1
    screen -S mcf
  • 然后在该分屏启动服务器
    1
    java -jar -Xms512M -Xmx2048M server.jar nogui
    运行后可以直接在后台指令区和服务器进行交互。也可以给自己管理员权限方便在游戏中直接控制。
    如果想返回ubuntu自己的指令行,就按ctrl+A+D回去。
    想要重新进入这个screen进程回到mc运行的那个指令行,就打开ssh输入
    1
    screen -r mcf
    如果想要删除这个screen会话,就输入
    1
    screen -S mcf -X quit

常用指令

在ubuntu终端(mc的服务器端)不需要斜杠。在客户端需要。

1
2
/stop 停止游戏
/op binary 设为管理员

服务器后台遇到的一个问题

ServerHangWatchdog detected that a single server tick took 60.00 seconds (should be max 0.05),导致服务器停止运行了

这是我落后的腾讯云跟不上mc服务器先进的看门狗计时自我要求了!
修改server.properties文件内的

1
max-tick-time=60

60改成-1,-1表示:哪怕延迟再多,看门狗都不会切断服务器了。

优化

server.properties文件修改

entity-broadcast-range-percentage 实体游戏渲染距离(10~1000)
设置小一点

Description: Exception in server tick loop tick的最大加载毫秒数(超过这个时间将判定服务器崩溃)
设为-1。假如你设为某个不是-1的值,比方说256,那么服务器跟不上玩家的时间超出256跳之后就会崩溃。

max-world-size 世界大小
改小,反正跑不了那么多图

network-compression-threshold 数据包多大时开始压缩传输
这个值设置得小会让CPU负担大一点,设置得大会让网卡(跟服务器带宽有关)负担大一点。
所以这个值,看你的机器性能瓶颈在哪。查看你的CPU和带宽的使用情况,通过调节这个值让两边的负载尽量均衡,而不要让某一个累死另外一个轻松死。

view-distance视距
调小一点