Tag

日志分析

Paper Watchdog 报错

问题特征

使用paper及其分支核心,服务端长时间无响应时会由Watchdog打印线程转储信息

特征是有很长的一串报错,开头如下

[Paper Watchdog Thread/ERROR]: --- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH - git-Paper-xxx (MC: 1.1x.x) ---
[Paper Watchdog Thread/ERROR]: The server has not responded for 10 seconds! Creating thread dump

中间会出现多个类似以下结构的报错

[Paper Watchdog Thread/ERROR]: ------------------------------
[Paper Watchdog Thread/ERROR]: Current Thread: Timer hack thread
[Paper Watchdog Thread/ERROR]: 	PID: x | Suspended: false | Native: false | State: TIMED_WAITING
[Paper Watchdog Thread/ERROR]: 	Stack:
[Paper Watchdog Thread/ERROR]: 		xxxx.xxxx.xxxxxx.xxxxx(xxxx xxxx)
[Paper Watchdog Thread/ERROR]: ------------------------------

最后会进行插件和存档的保存消息,并且不会退出服务端的进程(会导致自动重启脚本失效)

这是由于服务端的进程未响应的时长超出了设置的限制,导致Watchdog打印线程转储信息并自动保存关闭

可能的导致原因

  • 某些插件的代码有bug导致主线程进入死循环
  • 粘液科技之类的插件
  • 玩家做的红石机器造成了过大的卡顿
  • 服务器配置太差

解决办法

寻找卡服根源

可以安装spark插件(指令教程),查看占用分析

自行寻找(可以二分法删插件),多看看日志可能有所帮助

升级硬件

大部分时候是升级CPU,cpu选择优先考虑单核水平,可以百度cpu天梯图查看单核排名

和多分配内存(分配过多内存并没有作用,多分配内存只是为了减小gc压力,cpu速度不够的时候并不能靠多分内存弥补)

修改watchdog的限制

治标不治本,该卡还会卡,仅在某些特殊情况(如预加载地图)下使用

找到 服务端文件夹/paper.yml (高版本在 服务端文件夹/config/paper-global.yml ),打开并找到以下选项

watchdog: early-warning-every: 5000 early-warning-delay: 10000

  • early-warning-every: 服务器无响应时打印线程转储之间的间隔(以毫秒为单位)
  • early-warning-delay: 服务器无响应后距离watchdog线程开始打印线程转储的毫秒数

将两个值改成你要的数值即可,注意单位是毫秒

崩溃&启动失败的日志/崩溃报告解析

日志

日志位于

  • 客户端:客户端文件夹/.minecraft/logs
  • 服务端:服务端文件夹/logs

文件夹中,最后一次启动的日志是 latest.log ,每当服务端启动时,旧的 latest.log 会被压缩到 年-月-日-次数.log.gz 文件中

如果你的启动脚本是带有自动重启的,并且你没有在它开始重启之前关闭它,那么 latest.log 就会被压缩到gz文件中

此时你需要找到对应的gz文件,使用解压缩软件查看其中的log文件

log文件可以直接用文本文档打开,通常有问题的日志应该从后往前看

崩溃报告

日志位于

  • 客户端:客户端文件夹/.minecraft/crash-reports
  • 服务端:服务端文件夹/crash-reports

文件夹中,崩溃报告的命名格式是 crash-年-月-日_时.分.秒-服务端/客户端.txt

崩溃报告中通常会带有

  • 崩溃原因的描述
  • 导致崩溃的报错
  • 崩溃时运算的实体
  • 服务器的存档信息
  • 服务器的版本
  • 服务器的JVM信息
  • 服务器的系统信息
  • MOD列表(mod服)

以下是一些常见的问题

mod前置未安装

Mod §eMOD名字§r requires §6前置名字§r §o前置版本 or above§r§7Currently, §6前置名字§r§7 is §o§nnot installed

解决办法:安装对应版本的前置

mod前置版本不合要求

Mod §e`MOD名字`§r requires §6`前置名字`§r §o需要的`前置版本` or above, and below `` 需要的`前置版本` ``§r§7Currently, §6`` `前置名字` ``xx§r§7 is §o当前`` 的`前置版本` ``

解决办法:安装对应版本的前置

Minecraft服务端地址

默认地址

Minecraft服务端的端口默认是25565,地址默认是127.0.0.1

客户端进入服务端需要填写 地址:端口 ,注意这里的地址和端口需要换成你自己的,并且冒号一定要用英文的 : ,否则会无法连接。当你认为自己其他地方没有问题的时候请检查一下冒号是否写错了

修改端口

端口在 服务端文件夹/server.properties 文件中修改,此文件可以直接用文本文档打开

在其中找到 server-port=25565 (其他port项不用管),将其中的25565调整到你需要的端口(如非必要,不要修改端口,游戏中加入服务器时,端口是25565的服务器的地址可以不写端口)

端口可用数值1-65535,其中0不使用,1-1023为系统端口,也叫BSD保留端口,1024-65535为用户端口,又分为:BSD临时端口(1024-5000)和BSD服务器(非特权)端口(5001-65535),建议使用五位数端口以防止端口冲突

修改端口后需要重启服务器生效,如果重启时控制台报错 **** FAILED TO BIND TO PORT! 就代表你选择的端口被其他进程占用了,需要更换端口

指定地址

默认地址127.0.0.1可以理解为本机,也就是当你服务端和客户端在一台机器上的时候可以使用此地址连接到服务端

在同一局域网中可以通过 服务端所在机器的ip:服务端端口 连接到服务端,例如( 192.168.1.1:25565

如果要跨公网连接的话有以下几种方式

  1. 有自己的公网ip(公网ip在哪儿,服务端的机器也要在哪儿,不要说有个vps然后要自己电脑开的服能远程连接,不现实)
  2. 使用frp,也就是内网穿透,教程
  3. 使用自己的动态公网ip,教程

常见问题

no further information

连接时出现

意为你填写的地址没有响应

可能原因有

  1. 地址有错误
  2. 防火墙没关闭
  3. 安装组未放行(vps)

如果是vps,请关闭系统防火墙并配置安全组放行

如果是第三方服务商提供的机器,可以找服务商询问

Unknow Host

大概率是地址写错了,请检查地址种的冒号是否是英文的冒号 :

原版客户端进Forge服

你需要使用mod一致的客户端连接服务器

连接中止

可能的原因有很多,你应该

  1. 检查你的客户端mod是否与服务端mod对应
  2. 检查你的服务端和客户端日志
  3. 如果你看不懂日志,请把完整的日志文件发给看得懂的人让他帮你(问的时候先提供日志并且详细地描述问题)