deadlock的几个问题

随手列举几个问题。

1. 什么是死锁(一部分人认为是锁等待了)

2. 形成死锁的条件(不止一个线程,不止一个资源。一部分人只提到一个资源)

3. 如何避免死锁(从死锁形成的条件出发)

4. 死锁检测(借助一些工具,如jconsole, 或是看thread dump)

5. 出现死锁如何处理(找出问题,修复吧)

以下是用Java编写的一个死锁场景的thread dump片段。从里面可以看出,线程0占着一个资源了,还想去拿线程1占有的一个资源,而线程1却也在等着线程0释放它占着的资源。你拿着不放,想要我放;我也拿着不放,想要你放。好吧,那就干等了。

Found one Java-level deadlock:
=============================
"Thread-1":
  waiting to lock monitor 0x00000266ff560a38 (object 0x00000007799301a0, a java.lang.Object),
  which is held by "Thread-0"
"Thread-0":
  waiting to lock monitor 0x00000266ff55ed58 (object 0x0000000779930178, a java.lang.Object),
  which is held by "Thread-1"

Java stack information for the threads listed above:
===================================================
"Thread-1":
	at Thead1.run(Thead1.java:24)
	- waiting to lock <0x00000007799301a0> (a java.lang.Object)
	- locked <0x0000000779930178> (a java.lang.Object)
	at java.lang.Thread.run(Thread.java:750)
"Thread-0":
	at Thead1.run(Thead1.java:24)
	- waiting to lock <0x0000000779930178> (a java.lang.Object)
	- locked <0x00000007799301a0> (a java.lang.Object)
	at java.lang.Thread.run(Thread.java:750)

Found 1 deadlock.

以下是Jconsole的截图。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Flink与MySQL之间发生死锁的情况可能是由于频繁写入某个表或资源导致的。这种情况下,当多个并发任务尝试同时获取锁时,可能会发生死锁。死锁是指两个或多个任务无法继续执行,因为它们互相等待对方释放资源。 一种解决此类死锁问题的方法是重新启动TaskManager。虽然可以通过编写定时任务来定期重启TaskManager,但这种方式可能不够优雅和高效。 另外,为了避免死锁的发生,可以考虑以下几个方案: 1. 增加数据库连接池的大小:通过增加连接池的大小,可以提高并发写入数据库的能力,从而减少死锁的概率。 2. 减少并发写入频率:如果可能的话,可以尝试降低并发写入数据库的频率,以减少死锁的可能性。 3. 使用事务和锁机制:可以使用事务和锁机制来确保写入数据库的原子性和一致性。通过合理使用事务和锁,可以减少死锁的风险。 总之,flink与mysql之间出现死锁的情况可能是由于频繁写入某个表或资源导致的,并且可以通过增加连接池大小、减少并发写入频率和使用事务和锁机制来减少死锁的发生。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Flink结果集写Mysql的异常分析](https://blog.csdn.net/weixin_34101914/article/details/113300002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [flink mysql断开连接 使用druid 重写 flink-connector-jdbc_2.11-1.14.3.jar](https://blog.csdn.net/jy00885876/article/details/127226644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值