背景
最近压测 Cassandra 的时候, 发现一个 Cassandra 进程一直没有完成初始化. 经过排查后发现是死锁问题, 这篇文章将会带领大家回顾整个排查过程, 学习如何排查 Java 死锁问题, 是一个非常值得学习的经验.
调查过程
1. 问题发现
首先是启动后, 通过 Cassandra 命令 nodetool netstats 观察何时进入 NORMAL 状态. 如下图所示:
但是过了很久都没有进入 NORMAL, 一直处于 STARTING 状态.
2.jstack 排查
想要知道为啥一直处于 STARTING 状态, 当然是用 Jstack 去观察进程到底在做什么.
jstack 显示主线程处于 WAITING 状态. 这符合我们观察到的现象, 因为确实一直卡在 STARTING 状态没有走下去. 使主线程卡住的地方是
AbstractCommitLogSegmentManager.awaitAvaila
来源: https://yq.aliyun.com/articles/718250