Found one Java-level deadlock:
=============================
"DataXceiver for client DFSClient_attempt_xxx at /1.2.3.4:100 [Sending block BP-xxxxx:blk_123_456]":
waiting to lock monitor 0x00007f77d0731768 (object 0x00000000d60d9930, a org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl),
which is held by "Thread-565"
"Thread-565":
waiting for ownable synchronizer 0x00000000d55613c8, (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),
which is held by "DataNode: heartbeating to my-nn:8020"
"DataNode: heartbeating to my-nn:8020":
waiting to lock monitor 0x00007f77d0731768 (object 0x00000000d60d9930, a org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl),
which is held by "Thread-565"