常见报错实测
2026-11-03
Go fatal error: all goroutines are asleep - deadlock!:recover 抓不到,有 Accept、Sleep 循环或 ticker 读取在场时检测不到,泄漏的 1 万个 goroutine 不报错
实测 Go fatal error: all goroutines are asleep - deadlock!:recover 抓不到、退出码 2;9 种写法的 goroutine 状态各不同;有 Accept、Sleep 循环、signal.Notify、有人读的 ticker 时检测不到;SIGQUIT 看栈;1 万个泄漏的 goroutine 不报错、每个约 2 KB;go test 里先等到 test timed out。
Go
deadlock
all goroutines are asleep
fatal error
channel
sync.WaitGroup
SIGQUIT
goroutine 泄漏
报错
真实验证
动画演示
常见报错实测
2026-11-03
Go fatal error: concurrent map writes:recover 抓不到,每个 goroutine 写 10 次时检测只发现 11/30,sync.Map 在写占 1% 时比 Mutex 快 11 倍
实测 Go fatal error: concurrent map writes:recover 抓不到;写、读写、遍历加写三种文字;检测是尽力而为(每个 goroutine 写 10 次只发现 11/30,GOMAXPROCS=1 为 0/30);-race 9/10 和 10/10;Mutex、RWMutex、32 分片、sync.Map 在 1%、10%、50% 写占比下的吞吐。
Go
concurrent map writes
concurrent map read and map write
sync.Map
RWMutex
race detector
fatal error
报错
真实验证
动画演示
常见报错实测
2026-11-03
Go panic: send on closed channel:recover 救不了别的 goroutine,select 带 default 也 panic,多生产者 close(data) 30/30 次 panic、改用 done channel 为 0
实测 Go panic: send on closed channel:与 close of closed / nil channel 的原文;recover 能抓但抓不到别的 goroutine 的;select 带 default 也 panic;关闭时阻塞的发送者全部 panic;已关闭的 channel 在 select 里 100 ms 空转 114 万次;4 个生产者 close(data) 30/30 次 panic,改用 done channel 为 0。
Go
panic
send on closed channel
close of closed channel
channel
select
recover
goroutine
报错
真实验证
动画演示
常见报错实测
2026-11-03
Go panic: invalid memory address or nil pointer dereference:addr=0x18 是字段偏移,typed nil 让 err != nil 为 true,十种“空”只有三种不出错
实测 Go panic: runtime error: invalid memory address or nil pointer dereference:addr 就是字段偏移(0x0、0x8、0x10、0x18);十种 nil 情形对照(读 nil map 不出错、写 nil map 是另一句 panic);typed nil 使 err != nil 为 true;http.Get 失败后 resp 为 nil;debug.Stack 保留位置。
Go
nil pointer dereference
invalid memory address
SIGSEGV
typed nil
nil map
panic
recover
报错
真实验证
动画演示
常见报错实测
2026-11-03
Go missing go.sum entry、no required module provides package 等 8 个模块报错:go mod download 修不好,go mod tidy 才行,GOTOOLCHAIN=local 与 auto 行为不同
实测 Go 模块的 8 个常见报错:no required module provides package;missing go.sum entry(go mod download 修不好、go mod tidy 才行);checksum mismatch SECURITY ERROR;module declares its path as;updates to go.mod needed;go.mod requires go >= 1.99 与 GOTOOLCHAIN;import cycle not allowed;404/410 与 GOPRIVATE。全部用本机假仓库复现。
Go
go.mod
go.sum
missing go.sum entry
no required module provides package
checksum mismatch
GOTOOLCHAIN
GOPRIVATE
import cycle
报错
真实验证
动画演示
常见报错实测
2026-11-03
Java OutOfMemoryError 的 6 种消息:GC overhead limit exceeded 只在 Parallel 下出现,Metaspace 时堆只用了 4 MiB,别的线程 OOM 时进程照样跑
实测 Java OutOfMemoryError 的 6 种常见消息:Java heap space(别的线程 OOM 时进程继续跑)、GC overhead limit exceeded(Parallel 10/10,G1 与 Serial 为 0)、Requested array size exceeds VM limit、Metaspace(堆只用 4 MiB)、unable to create native thread(这台 Mac 上 4074 个线程)、Direct buffer memory,以及 catch OOM 的正确写法。
Java
OutOfMemoryError
Java heap space
GC overhead limit exceeded
Metaspace
unable to create native thread
Direct buffer memory
JVM
报错
真实验证
动画演示
常见报错实测
2026-11-03
Java UnsupportedClassVersionError: class file version 65.0:JDK 17/21/27 九种组合,-source/-target 不检查 API 到运行时才 NoSuchMethodError,jar 里混版本用到才报
实测 Java UnsupportedClassVersionError: class file version 65.0:JDK 17/21/27 九种编译与运行组合;major version 52/55/61/65/71 的对应;--release 与 -source/-target 的区别(后者运行时 NoSuchMethodError);jar 里混了 17 与 21 的类时用到才报;javap 与 file 确认版本,以及直接敲 java 实际用到的是 JDK 17。
Java
UnsupportedClassVersionError
class file version
major version
javac
--release
JDK 17
JDK 21
报错
真实验证
动画演示
常见报错实测
2026-11-03
Java NoSuchMethodError、NoClassDefFoundError 与 ClassNotFoundException:方法返回类型改了源码不变也会出错,Could not initialize class 要找最早那条异常,同名类 classpath 先到先得
实测 Java NoSuchMethodError、NoClassDefFoundError、ClassNotFoundException 的区别:Class.forName 与直接引用找不到类各抛什么;static 初始化失败后 Could not initialize class 与 ExceptionInInitializerError;库升级 7 种二进制不兼容各抛什么(返回类型改了源码不变也会 NoSuchMethodError);两个 jar 同名类时 classpath 先出现的赢,及怎么查。
Java
NoSuchMethodError
NoClassDefFoundError
ClassNotFoundException
ExceptionInInitializerError
AbstractMethodError
依赖冲突
classpath
报错
真实验证
动画演示
常见报错实测
2026-11-03
Kafka CommitFailedException:真正的原因是两次 poll 间隔超过 max.poll.interval.ms,超时后重新 poll 从 offset 0 重复消费,新协议下 commitSync 还会“成功”却没有提交
实测 Kafka CommitFailedException:一批处理 5 秒超过 max.poll.interval.ms=3000 后 commitSync 失败、重新 poll 又从 offset 0 开始;减小 max.poll.records、调大间隔、加快处理三种修法;新协议 group.protocol=consumer 下 commitSync 返回成功却没有提交;用 kafka-consumer-groups 在服务端核对。
Kafka
CommitFailedException
max.poll.interval.ms
max.poll.records
consumer group
rebalance
KIP-848
报错
真实验证
动画演示
常见报错实测
2026-11-03
Kafka RecordTooLargeException:max.request.size 与 max.message.bytes 两种原文怎么区分,默认只能发 1048489 字节,压缩不能绕过客户端检查,消费端 fetch 设 1000 字节仍读到 3 MiB 消息
实测 Kafka RecordTooLargeException:客户端 max.request.size 默认 1048576 时最大 value 1048489 字节,服务端 max.message.bytes 默认 1048588 时最大 1048516;两边原文不同;topic 级动态放开到 3 MiB;gzip 下客户端按压缩前检查、服务端按压缩后检查;消费端 fetch 限制设 1000 字节仍能读到 3 MiB 的消息。
Kafka
RecordTooLargeException
MessageSizeTooLarge
max.request.size
message.max.bytes
max.message.bytes
compression
报错
真实验证
动画演示
常见报错实测
2026-11-03
Kafka LEADER_NOT_AVAILABLE:4.3.1 上第一次往自动创建的 topic 发消息警告的是 UNKNOWN_TOPIC_OR_PARTITION,500 分区首条要 3 秒,advertised.listeners 配错时 8 秒超时
实测 Kafka LEADER_NOT_AVAILABLE:在 4.3.1 上第一次往自动创建的 topic 发消息警告的是 UNKNOWN_TOPIC_OR_PARTITION,首条 288 ms 对 8 ms,没有复现 LEADER_NOT_AVAILABLE;500 分区时首条 3064 ms 且要经历 NOT_LEADER_OR_FOLLOWER 重试;关闭自动创建时 3 秒 TimeoutException;advertised.listeners 配错时 8 秒超时。
Kafka
LEADER_NOT_AVAILABLE
UNKNOWN_TOPIC_OR_PARTITION
NOT_LEADER_OR_FOLLOWER
auto.create.topics.enable
advertised.listeners
max.block.ms
报错
真实验证
动画演示
常见报错实测
2026-11-03
Redis READONLY You can't write against a read only replica:故障切换后老连接不会断,降级前写进旧主的 100 个 key 同步后全丢,replica-read-only no 不是修法
实测 Redis READONLY You can't write against a read only replica:哪些命令被拒、哪些在从库上放行(PUBLISH、CONFIG SET、BGSAVE);故障切换后旧主降级,老连接继续写得到 READONLY,降级前写的 100 个 key 同步后全丢;replica-read-only no 的写入撑不过全量同步;集群里的 READONLY 命令。
Redis
READONLY
read only replica
replica-read-only
REPLICAOF
故障切换
脑裂
Redis Cluster
READONLY 命令
报错
真实验证
动画演示