Minecraft(我的世界)中文论坛

标题: [教程] 自己动手排查报错

作者: 海螺螺    时间: 2017-9-23 15:40
标题: [教程] 自己动手排查报错
本帖最后由 754503921 于 2019-7-2 08:36 编辑

如何从一万个报错排查到清零
—— 报错大全与解决方案
开服的时候,各位腐竹一定遇到过这些信息,也就是所谓的报错。
这篇帖子将会教你怎么看报错,找问题,并且不需要Java基础。
这里的看不懂也没关系,可以往下翻到常见异常大全。

一个典型报错的格式

分为两种,第一种
这种报错分为几个部分
  • 一个可能的 Error occurred while xxxxxxxxx
  • 一个报错种类,如上红色部分
  • 报错种类后跟随的可能的报错原因,如上橙色部分
第二种如下
此类报错分为以下部分
  • 一个可能的 Error occured during xxxxxx 提示你报错了
  • 一个报错类型以及随后的可能有的报错原因,如上 java.lang.Throwable
  • 一个或多个详细报错信息,格式为 Caused by: 报错种类: 报错原因
两种报错都有如下格式,分别是:
  • (Caused by:) java.xxx.XxxException: some reason,我们称之为异常类型
  • (Caused by:) java.xxx.XxxException: some reason,我们称之为异常信息
  • at xxx.某些插件的.包名.xxx.发生错误的类名.错误的方法名(类名.java:行数) ~[资源地址:版本],我们称之为栈信息
  • ... X more,我们称之为省略的栈信息
  • 另外在Bukkit里,一般会有提示信息,如上紫色,我们称之为Bukkit信息
  • 部分插件作者会提供报错前的一段说明,我们称之为插件信息
请牢记上面的5个名词,在接下来的内容,我将频繁使用这五个词。

判断这个报错发生的原因

我想从我的端翻几个报错结果发现一个没有,那就只好去联机问答找一个来
结果发现联机问答没有啥适合讲的报错
示例一
  • 先看Bukkit提示信息,中文意思为 无法加载文件夹 'plugins' 中的 'plugins\DynmapPlotMe.jar'
  • 接着看异常类型,我们一般看最后的类名,如上红色部分的 UnknownDependencyException,意味未知依赖异常
  • 接着看异常信息,dynmap
分析得出,这个报错由于 DynmapPlotMe.jar 插件需要依赖 Dynmap 插件,而 Dynmap 未安装,于是报错。
必要情况下我们需要查看栈信息来判断错误原因。
示例二
  • 先看Bukkit提示信息,意为 AuthMe v3.5-SNAPSHOT 处理 PlayerJoinEvent 事件时报错
  • 接着看异常类型,看最后的大驼峰类名,为 EventException,事件异常
  • 接着看下一个异常类型,NullPointerException,空指针异常
由于空指针异常(常称为 NPE)是最难以判断错误的异常,所以我们需要看情况查看栈信息
经验:查看栈信息时,常从第二个异常类型(Caused by: java.lang.NullPointerException)下方的栈信息开始,多为 Caused by 开头
  • at net.milkbowl.vault.permission.plugins .Permission_GroupManager.getPrimaryGroup(Permission_GroupManager.java:327) 中有 Permission 字样,说明可能是权限带来的报错,资源地址为 Permission_GroupManager.java,说明可能是 GroupManager 插件带来的报错
  • at fr.xephi.authme.listener.AuthMePlayerListener.onPlayerJoin(AuthMePlayerListener.java:726) ~[?:?] 中,包名为 authme,调用方法 onPlayerJoin,说明可能是玩家加入时进行的权限检查的错误
事实上确实是 GroupManager 的设置失败带来的报错,紧跟着这条报错的后一条也证明了这一点:(Residence 也查询了权限)

解决一个异常
接着上面的报错来说,我们已经判断了是 GroupManager 的报错,那么怎么解决呢?(前提是 GroupManager 支持你的版本)
我们应该在茫茫似海的报错群中寻找 GroupManager 的报错信息,如下:
  • GroupManager 是个仔细写的插件,所以提供了插件信息:其中有一句 The following file couldn't pass on Parser. plugins\GroupManager\worlds\world\groups.yml,说明是 GroupManager\worlds\world\groups.yml 配置文件出了一点小差错
  • 接着看Bukkit信息,意为 启动 GroupManager v2.0 (2.12.1) (Phoenix) 时出现异常
  • 接着看异常种类和异常信息,异常种类不认识没关系,异常信息与插件信息相同
  • 接着看下一个异常种类,与上一个基本相同
  • 接着看下一个异常种类和异常信息,Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1,含有 charset 字样,意为 编码,说明这个配置文件可能编码有误
  • 接着看下一个,Caused by: java.nio.charset.MalformedInputException: Input length = 1,看不懂,不过没关系,我们已经解决了问题
经过分析,GroupManager 的组文件的编码有误,因为示例服务端为 1.8.0,所以应转码为 ANSI
类似的解决方法还有
  • 删除报错插件
  • 删除报错配置文件或编辑至正确
  • 按照报错的异常信息自行操作
  • 将异常信息提交给作者

常见异常类型列表及解决方法
善用 Ctrl+F 搜索
服务器启动
InvalidDescriptionException: Invalid plugin.yml

UnknownDependencyException: xxxx

IllegalArgumentException: The following file couldn't pass on Parser.

CommunicationsException: Communications link failure

ReaderException: special characters are not allowed
InvalidConfigurationException: unacceptable character

InvalidConfigurationException: while scanning an anchor
InvalidConfigurationException: while scanning a simple key

InvalidConfigurationException: mapping values are not allowed here

InvalidConfigurationException: while scanning for the next token

NoClassDefFoundError: aa/bbbb/CcccDdddd

SocketTimeoutException: connect timed out
SocketTimeoutException: Read timed out
SocketException: Connection reset
SocketException: Software caused connection abort: recv failed
ConnectException: Connection refused: connect
ConnectException: Connection timed out: connect

UnsupportedClassVersionError: xx/xx/Xxxxx : Unsupported major.minor version XX.0

SQLException: file is encrypted or is not a database

RuntimeException: Essentials API is called before Essentials is loaded.

InvalidConfigurationException: while parsing a block mapping

FileNotFoundException: plugins\XxxxXxxx\yyy.yml (拒绝访问。)


服务器运行时

UnhandledException: Plugin Xxxxxxx vX.0 generated an exception while executing task x

IllegalArgumentException: Async entity add

ClassCastException: xxx.xxx.XxxXxx cannot be cast to yyy.yyy.YyyYyy

ClassNotFoundException: net/minecraft/server/v1_X_RX/XxxxXxxx

OutOfMemoryError: Java heap space

NoSuchFieldError: XXX_XXX
IllegalArgumentException: No enum constant xxxxx.xxx.XX_XXX
NoSuchMethodError: xxx.xxx.XxxXxx.xxXxx

IllegalArgumentException: Entry cannot be longer than 16 characters!

ArrayIndexOutOfBoundsException: X

CommandException: Unhandled exception executing command 'xx' in plugin XxxXxx vX.Y

FieldAccessException: No field with type xxx.XXX exists in class YyyyZzzz.

NumberFormatException: For input string: "XXX"

IllegalStateException
StackOverflowError
ConcurrentModificationException

Caused by: <eval>
ScriptException: TypeError: XXXXX

AuthenticationUnavailableException: Cannot contact authentication server


其他

EventException

NullPointerException

UnknownHostException: xxx.website.com

[Server thread/ERROR]: Ambiguous plugin name `Xxxxxx' for files `plugins/Xxxxxx1.jar' and `plugins/Xxxxxx2.jar' in `plugins'

Unable to instantiate org.fusesource.jansi.WindowsAnsiOutputStream

MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key org.bukkit.xxxxxx

如何从栈信息诊断
栈信息主要从以下几点判断
  • 格式
  • 关键字

格式

关键字(解决 NullPointerException)
常用于普通方法无法分析的情况。

示例一
栈信息从上往下看。
me.**.GameManager.loadTiles(G***4) ~[?:?],由于含有 GameManager 字样,结合这个插件是由同一个作者使用同一个前置开发的,所以可能是前置库的版本过低。

示例二
栈信息的第 2 - 5 条都含有 configuration 字样,所以是配置文件的问题。
第 6 -7 条为 rpgitem 插件的包名,并且含有 ItemManager(物品管理器)字样,
所以是RPGItem插件的物品保存配置文件损坏。

示例三
这份报错为 Residence 插件的报错,分析栈信息,发现有 teleport 字样,所以可能是传送出现的问题。
所以可能是领地插件的保存文件损坏,导致领地的传送点获取失败(getTeleportLocation)。

看懂 Spigot Watchdog 报告
什么是 Spigot Watchdog
Spigot Watchdog 为 spigot 内置的用于检测服务器状况的模块,当服务器卡死后,Watchdog 将会强制停止服务器并打印所有线程的信息。
所以一般Watchdog报告都特别长。

一份典型的 Watchdog 报告

为了不使整个报告过长,我使用 *** 对部分进行了省略。
当你查看日志文件时,Watchdog 的报告有以下几点典型的特点:
  • [Spigot Watchdog Thread/ERROR]
  • The server has stopped responding!
  • Please report this to http://www.spigotmc.org/
  • Be sure to include ALL relevant console errors and Minecraft crash reports
  • Server thread dump (Look for plugins here before reporting to Spigot!):
当你确定好这是Watchdog的日志后,你需要找出问题所在。

找到导致卡顿的线程

很简单,直接在日志文件中搜索 State: BLOCKED 即可
如上,导致卡顿的线程的栈信息就被找了出来
红色部分为阻塞标志,紫色部分为对应插件的信息。
由此可以看出,是使用 ProtocolLib(包名为com.comphenix.protocol)的插件进行网络操作(io.netty包)导致的卡顿。

一些其他的诊断方法

我们可以通过搜索 Server thread 来查看服务器主线程的卡顿情况,如下
这两个栈信息都是Server thread的信息,可以看到阻塞在了 ServerConnection(服务器连接) 和 com.mojang.authlib.GameProfile.toString(mojang的登陆验证),那么可能是玩家连接服务器时连接又断开了,导致服务器卡顿。

欢迎各位腐竹到这里提问咨询报错信息,如果实用我会将其添加进入。
当然如果你知道某些报错以及解决方法也可以回复。
在找报错之前请先确认你使用的插件版本是否严格符合服务端版本
报错了有时最好的解决方法是更新。

[groupid=1330]PluginsCDTribe[/groupid]
作者: 子德    时间: 2017-9-25 22:51
精华没跑了
作者: 子德    时间: 2017-9-27 19:23
本帖最后由 [email protected] 于 2017-9-29 18:15 编辑

还真跑了。联机教程的版主,唉。

作者: ouAuAuo    时间: 2017-9-27 19:27
真的写得不错,对广大腐竹日常报错问题也都一一指出并且分析,加油!
作者: xiaowaks    时间: 2020-2-17 12:26
.................
作者: ABCD144A2    时间: 2020-3-6 08:46
can't find resource for bundle java,util,propertyresourcebundle, key givespawn
作者: dousha0v0    时间: 2020-3-17 11:45
写的很不错啊 收藏了2333
作者: 2155970    时间: 2020-3-18 20:14
一看就会,一做就废
作者: 骁骐    时间: 2020-3-18 21:17
首先感谢作者,然后就进我的收藏夹恰灰吧。。
作者: 皮咔皮    时间: 2020-3-18 22:26
谢谢楼主,慢慢钻研钻研吧
作者: 抱枕丶蓝晨    时间: 2020-4-1 08:27
怎么没有Unble to access jarfile apigot错误
作者: 阿狸哥哥    时间: 2020-4-10 10:29
感谢大佬分享
作者: Sheng_Pig    时间: 2020-4-11 02:46
工业mod一装上就崩,其他mod都删了也没用,工业mod换过很多版本都不行
---- Minecraft Crash Report ----
// Quite honestly, I wouldn't worry myself about that.

Time: 4/10/20 6:25 PM
Description: Exception in server tick loop

Duplicate Mods:
        ic2 : /home/minecraft/multicraft/servers/server2384/./mods/industrialcraft-2-2.8.99-ex112.jar
        ic2 : /home/minecraft/multicraft/servers/server2384/./mods/.jar

net.minecraftforge.fml.common.DuplicateModsFoundException
        at net.minecraftforge.fml.common.Loader.identifyDuplicates(Loader.java:466)
        at net.minecraftforge.fml.common.Loader.identifyMods(Loader.java:428)
        at net.minecraftforge.fml.common.Loader.loadMods(Loader.java:568)
        at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:97)
        at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:334)
        at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:166)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:598)
        at java.lang.Thread.run(Thread.java:745)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- System Details --
Details:
        Minecraft Version: 1.12.2
        Operating System: Linux (amd64) version 3.10.0-1062.el7.x86_64
        Java Version: 1.8.0_111, Oracle Corporation
        Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Oracle Corporation
        Memory: 266011256 bytes (253 MB) / 501219328 bytes (478 MB) up to 1398276096 bytes (1333 MB)
        JVM Flags: 5 total; -Xmx1500M -Xms64M -XX:MaxPermSize=128M -XX:+AggressiveOpts -XX:+UseCompressedOops
        IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
        CraftBukkit Information:
   Running:
   Failed to handle CraftCrashReport:
java.lang.NullPointerException
        at org.bukkit.Bukkit.getName(Bukkit.java:92)
        at org.bukkit.craftbukkit.v1_12_R1.CraftCrashReport.call(CraftCrashReport.java:20)
        at net.minecraft.crash.CrashReportCategory.func_189529_a(CrashReportCategory.java:96)
        at net.minecraft.crash.CrashReport.func_71504_g(CrashReport.java:120)
        at net.minecraft.crash.CrashReport.<init>(CrashReport.java:41)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:661)
        at java.lang.Thread.run(Thread.java:745)

        FML: MCP 9.42 Powered by Forge 14.23.5.2847 6 mods loaded, 0 mods active
        States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored

        | State | ID        | Version      | Source                             | Signature |
        |:----- |:--------- |:------------ |:---------------------------------- |:--------- |
        |       | minecraft | 1.12.2       | minecraft.jar                      | None      |
        |       | mcp       | 9.42         | minecraft.jar                      | None      |
        |       | FML       | 8.0.99.99    | CatServer.jar                      | None      |
        |       | forge     | 14.23.5.2847 | CatServer.jar                      | None      |
        |       | ic2       | 2.8.99-ex112 | .jar                               | None      |
        |       | ic2       | 2.8.99-ex112 | industrialcraft-2-2.8.99-ex112.jar | None      |

        Loaded coremods (and transformers):
        Profiler Position: N/A (disabled)
        Is Modded: Definitely; Server brand changed to 'fml,forge'
        Type: Dedicated Server (map_server.txt)
作者: Di_Ting    时间: 2020-4-17 22:52
服务器核心是Spigot 1.12.2  QuantumRPG版本是 4.0.7.100-BETA
被Mythicmobs的怪物用弓箭射击就报错,大佬帮看看是什么问题吧

作者: czmer    时间: 2020-4-18 16:43
这才是真的干货,支持作者
作者: Kaycold    时间: 2020-5-2 17:53
收藏了,支持作者
作者: 偿我悲欢    时间: 2020-5-8 08:46
谢谢楼主,已经进入收藏恰灰了
作者: mogumogu_    时间: 2020-5-8 12:44
..............
作者: Monsterssss    时间: 2020-5-21 23:06
从入门到放弃
作者: 2403    时间: 2020-5-23 09:15
16:08 INFO]: [Server thread] Server side modded connection established
16:08 INFO]: testplayer[/233.233.233.233:23333] logged in with entity id 2431 aworld] 2112.300000011921, 79.0, 1942.699999988079)
16:08 INFO]: testplayer
16:08 WARN]: java.lang.IllegalStateException: Unable to find method getTypeI]).
16:08 WARN]:        at com.comphenix.attribute.NbtFactory.getMethod(NbtFactoava:817)
16:08 WARN]:        at com.comphenix.attribute.NbtFactory.getMethod(NbtFactoava:816)
16:08 WARN]:        at com.comphenix.attribute.NbtFactory.<init>(NbtFactory.:366)
16:08 WARN]:        at com.comphenix.attribute.NbtFactory.get(NbtFactory.jav3)
16:08 WARN]:        at com.comphenix.attribute.NbtFactory.getCraftItemStack(actory.java:603)
16:08 WARN]:        at com.comphenix.attribute.Attributes.<init>(Attributes.:244)
16:08 WARN]:        at fr.xephi.authme.cache.backup.FileCache.createCache(Fiche.java:104)
16:08 WARN]:        at fr.xephi.authme.listener.AuthMePlayerListener.onPlayen(AuthMePlayerListener.java:675)
16:08 WARN]:        at fr.xephi.authme.listener.AuthMePlayerListener_315_onPrJoin_PlayerJoinEvent.invoke(Uranium_ASMEventExecutorGenerate.java)
16:08 WARN]:        at cc.uraniummc.eventexecutor.EventExecutorImp.execute(EExecutorImp.java:23)
16:08 WARN]:        at org.bukkit.plugin.RegisteredListener.callEvent(RegistListener.java:62)
16:08 WARN]:        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplginManager.java:508)
16:08 WARN]:        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplginManager.java:493)
16:08 WARN]:        at net.minecraft.server.management.ServerConfigurationMar.func_72377_c(ServerConfigurationManager.java:362)
16:08 WARN]:        at net.minecraft.server.management.ServerConfigurationMar.initializeConnectionToPlayer(ServerConfigurationManager.java:218)
16:08 WARN]:        at cpw.mods.fml.common.network.handshake.NetworkDispatchompleteServerSideConnection(NetworkDispatcher.java:190)
16:08 WARN]:        at cpw.mods.fml.common.network.handshake.NetworkDispatchompleteHandshake(NetworkDispatcher.java:465)
16:08 WARN]:        at cpw.mods.fml.common.network.internal.HandshakeCompletandler.channelRead0(HandshakeCompletionHandler.java:26)
16:08 WARN]:        at cpw.mods.fml.common.network.internal.HandshakeCompletandler.channelRead0(HandshakeCompletionHandler.java:15)
16:08 WARN]:        at io.netty.channel.SimpleChannelInboundHandler.channelRSimpleChannelInboundHandler.java:98)
16:08 WARN]:        at io.netty.channel.DefaultChannelHandlerContext.invokeCelRead(DefaultChannelHandlerContext.java:337)
16:08 WARN]:        at io.netty.channel.DefaultChannelHandlerContext.fireChaRead(DefaultChannelHandlerContext.java:323)
16:08 WARN]:        at io.netty.handler.codec.MessageToMessageDecoder.channed(MessageToMessageDecoder.java:103)
16:08 WARN]:        at io.netty.handler.codec.MessageToMessageCodec.channelRMessageToMessageCodec.java:111)
16:08 WARN]:        at io.netty.channel.DefaultChannelHandlerContext.invokeCelRead(DefaultChannelHandlerContext.java:337)
16:08 WARN]:        at io.netty.channel.DefaultChannelHandlerContext.fireChaRead(DefaultChannelHandlerContext.java:323)
16:08 WARN]:        at io.netty.channel.DefaultChannelPipeline.fireChannelReefaultChannelPipeline.java:785)
16:08 WARN]:        at io.netty.channel.embedded.EmbeddedChannel.writeInbounbeddedChannel.java:169)
16:08 WARN]:        at cpw.mods.fml.common.network.internal.FMLProxyPacket.f148833_a(FMLProxyPacket.java:77)
16:08 WARN]:        at net.minecraft.network.NetworkManager.func_74428_b(NetManager.java:245)
16:08 WARN]:        at net.minecraft.network.NetworkSystem.networkTick2(Netwystem.java:176)
16:08 WARN]:        at net.minecraft.network.NetworkSystem.func_151269_c(NetSystem.java)
16:08 WARN]:        at net.minecraft.server.MinecraftServer.func_71190_q(MinftServer.java:989)
16:08 WARN]:        at net.minecraft.server.dedicated.DedicatedServer.func_7_q(DedicatedServer.java:459)
16:08 WARN]:        at net.minecraft.server.MinecraftServer.func_71217_p(MinftServer.java:806)
16:08 WARN]:        at net.minecraft.server.MinecraftServer.run(MinecraftSerjava:665)
16:08 WARN]:        at java.lang.Thread.run(Unknown Source)
16:24 INFO]: [AuthMe] testplayer logged in!
作者: 1619787807    时间: 2020-5-27 19:25
这个说的真细节good
作者: xqx145236    时间: 2020-5-27 20:52
大佬写的帖子就是不一样

作者: 劫゜    时间: 2020-6-13 13:37
有没有PlaceholderAPI插件报错异常解决方法啊
作者: fffilm    时间: 2020-10-15 21:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: wunaimzy    时间: 2020-11-18 14:27
真的干货 支持