chain33 icon indicating copy to clipboard operation
chain33 copied to clipboard

blockchain同步处理导致死锁

Open bysomeone opened this issue 2 years ago • 0 comments

  • blockchain事件处理限定1000容量
  • 比特元节点断网恢复后大批量同步区块,由于区块处理逻辑互斥,区块处理数超过1000后,事件处理流程堵塞
  • 获取到互斥锁的区块执行协程,在CheckBlock时依赖blockchain GetBlock事件处理(此时事件处理已经堵塞),导致循环依赖死锁

互斥锁1等待协程

937 @ 0x43b4b6 0x44c36c 0x44c346 0x468305 0x15894cc 0x15894a3 0x15986f4 0x15ab148 0x158fb37 0x159320b 0x46c3a1
#	0x468304	sync.runtime_SemacquireMutex+0x24					/usr/local/go/src/runtime/sema.go:71
#	0x15894cb	sync.(*RWMutex).RLock+0x4b						/usr/local/go/src/sync/rwmutex.go:63
#	0x15894a2	github.com/33cn/chain33/blockchain.(*OrphanPool).IsKnownOrphan+0x22	github.com/33cn/[email protected]/blockchain/orphanpool.go:52
#	0x15986f3	github.com/33cn/chain33/blockchain.(*BlockChain).ProcessBlock+0x953	
github.com/33cn/[email protected]/blockchain/process.go:71
#	0x15ab147	github.com/33cn/chain33/blockchain.(*BlockChain).ProcAddBlockMsg+0x147	
github.com/33cn/[email protected]/blockchain/query_block.go:255
#	0x158fb36	github.com/33cn/chain33/blockchain.(*BlockChain).addBlock+0x2b6		
github.com/33cn/[email protected]/blockchain/proc.go:188
#	0x159320a	github.com/33cn/chain33/blockchain.(*BlockChain).processMsg+0xca	
github.com/33cn/[email protected]/blockchain/proc.go:408

互斥锁2等待协程

62 @ 0x43b4b6 0x44c36c 0x44c346 0x468305 0x4828e5 0x483eb6 0x483e95 0x1598db8 0x1598c7c 0x15ab148 0x158fb37 0x159320b 0x46c3a1
#	0x468304	sync.runtime_SemacquireMutex+0x24					/usr/local/go/src/runtime/sema.go:71
#	0x4828e4	sync.(*Mutex).lockSlow+0x164						/usr/local/go/src/sync/mutex.go:138
#	0x483eb5	sync.(*Mutex).Lock+0x35							/usr/local/go/src/sync/mutex.go:81
#	0x483e94	sync.(*RWMutex).Lock+0x14						/usr/local/go/src/sync/rwmutex.go:111
#	0x1598db7	github.com/33cn/chain33/blockchain.(*BlockChain).maybeAddBestChain+0x97	github.com/33cn/[email protected]/blockchain/process.go:108
#	0x1598c7b	github.com/33cn/chain33/blockchain.(*BlockChain).ProcessBlock+0xedb	
github.com/33cn/[email protected]/blockchain/process.go:103
#	0x15ab147	github.com/33cn/chain33/blockchain.(*BlockChain).ProcAddBlockMsg+0x147	github.com/33cn/[email protected]/blockchain/query_block.go:255
#	0x158fb36	github.com/33cn/chain33/blockchain.(*BlockChain).addBlock+0x2b6		
github.com/33cn/[email protected]/blockchain/proc.go:188
#	0x159320a	github.com/33cn/chain33/blockchain.(*BlockChain).processMsg+0xca	
github.com/33cn/[email protected]/blockchain/proc.go:408

互斥锁占用协程,等待blockchain事件处理

1 @ 0x43b4b6 0x44b272 0x9c61a5 0x9c6525 0xb6dc02 0xb72965 0xb71019 0x159af53 0x159af20 0x1599bc9 0x15998c5 0x158b2b3 0x1598ff5 0x1598c7c 0x15ab148 0x158fb37 0x159320b 0x46c3a1
#	0x9c61a4	github.com/33cn/chain33/queue.(*client).WaitTimeout+0x184			
github.com/33cn/[email protected]/queue/client.go:155
#	0x9c6524	github.com/33cn/chain33/queue.(*client).Wait+0x24				
github.com/33cn/[email protected]/queue/client.go:170
#	0xb6dc01	github.com/33cn/chain33/util.CheckBlock+0x81					
github.com/33cn/[email protected]/util/exec.go:25
#	0xb72964	github.com/33cn/chain33/util.PreExecBlock+0x14a4				
github.com/33cn/[email protected]/util/util.go:448
#	0xb71018	github.com/33cn/chain33/util.ExecBlock+0x258					
github.com/33cn/[email protected]/util/util.go:273
#	0x159af52	github.com/33cn/chain33/blockchain.execBlock+0x172				
github.com/33cn/[email protected]/blockchain/exec.go:15
#	0x159af1f	github.com/33cn/chain33/blockchain.(*BlockChain).connectBlock+0x13f		github.com/33cn/[email protected]/blockchain/process.go:288
#	0x1599bc8	github.com/33cn/chain33/blockchain.(*BlockChain).connectBestChain+0x128		github.com/33cn/[email protected]/blockchain/process.go:206
#	0x15998c4	github.com/33cn/chain33/blockchain.(*BlockChain).maybeAcceptBlock+0x544		github.com/33cn/[email protected]/blockchain/process.go:187
#	0x158b2b2	github.com/33cn/chain33/blockchain.(*OrphanPool).ProcessOrphans+0x6b2		github.com/33cn/[email protected]/blockchain/orphanpool.go:235
#	0x1598ff4	github.com/33cn/chain33/blockchain.(*BlockChain).maybeAddBestChain+0x2d4	github.com/33cn/[email protected]/blockchain/process.go:123
#	0x1598c7b	github.com/33cn/chain33/blockchain.(*BlockChain).ProcessBlock+0xedb		github.com/33cn/[email protected]/blockchain/process.go:103
#	0x15ab147	github.com/33cn/chain33/blockchain.(*BlockChain).ProcAddBlockMsg+0x147		github.com/33cn/[email protected]/blockchain/query_block.go:255
#	0x158fb36	github.com/33cn/chain33/blockchain.(*BlockChain).addBlock+0x2b6			github.com/33cn/[email protected]/blockchain/proc.go:188
#	0x159320a	github.com/33cn/chain33/blockchain.(*BlockChain).processMsg+0xca		github.com/33cn/[email protected]/blockchain/proc.go:408

bysomeone avatar Jul 31 '23 07:07 bysomeone