seata 1.6.1 Global lock wait timeout解决

在系统上线运行一段时间后,seata client会出现拿不到全局锁的情况,

原因

由于全局事务的timeout设置过短,分支事务注册时,全局事务就回滚了,导致了锁泄露。

缓解

  1. 避免过大的事务;
  2. client设置重试。
1
2
3
seata.client.rm.lock.retry-interval=100
seata.client.rm.lock.retry-times=30
seata.client.rm.lock.retry-policy-branch-rollback-on-conflict=false

根治

  1. 设置合理的超时时间,并且保证client和server的时间是同步的;
  2. 升级到最新版本。
1
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 100 * 1000)