`
ni_de_yang_zi
  • 浏览: 29749 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

项目中死锁问题简单记录

    博客分类:
  • java
阅读更多
并发死锁问题
项目上线后发现死锁问题,数据量级并不大,现将分析过程和解决方案整理一下,以作记录
场景:申购,赎回两个接口并发做下单操作
描述:并发下单操作时,频繁的更新同一张表同一条记录,导致死锁现象发生
问题分析:由于是并发操作下才会出现死锁,考虑到有可能是两个接口当中的业务更新sql有交叉的可能,导致了互相竞争锁资源引起死锁问题
解决方案;分析两个业务的所有sql及执行顺序,找出交叉的业务(sql), 然后调整sql的执行顺序,保证两个业务sql执行顺序一致
结果:测试环境下测试并发同时下单正常,问题解决


上线之后发现问题依然存在,只是发生死锁的频率降低了,于是有接着找原因
分析之前引起死锁的操作场景可能并不是只有在并发下单那块,这里只是引起死锁问题的一个操作而已
后台业务系统做业务(保密业务不便说明)时也会频繁的做更新操作并且和下单的操作竞争资源,导致了问题的发生。

解决方案:整理出涉及到的相关业务操作,做排队处理(具体的排队方案就不在这里陈述),不再做并发更新操作。同时为了避免用户下单失败(死锁引起的)在代码中捕获死锁异常,进行重试操作。
结果:测试正常,上线后死锁问题再未发生

总结;排队之后在处理业务及时性上有一定延迟(牺牲了一些性能),好在这个系统的实时性要求并不高。

这里仅仅是大致记录一下死锁的发生,分析,解决的一个过程。

不知道大家在遇到死锁问题都是如何解决的?
分享到:
评论

相关推荐

    网络编程项目要求

    项目中涉及文件读写操作,用于保存聊天记录,维护用户信息等。 - **聊天记录文件格式设计**:格式应便于读取和写入,通常使用文本格式,便于调试和查看。需考虑记录内容的结构化,例如使用特定分隔符区分不同消息,...

    JAVA上百实例源码以及开源项目源代码

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    JAVA实现的简单的chatroom 适合初学者

    在本项目中,"JAVA实现的简单的chatroom 适合初学者",我们主要涉及三个核心领域:Java编程、GUI(图形用户界面)设计以及网络连接和多线程技术。这个项目对于初学者来说是一个很好的起点,因为它涵盖了Java编程中...

    Linux 0.11下信号量的简单实现——用生产者消费者做检验

    在计算机操作系统中,信号量(Semaphore)是一种非常重要的同步机制,用于解决多个进程之间的资源竞争问题。本项目针对的是Linux 0.11内核,它是一个早期版本的开源操作系统,对于理解操作系统底层原理有着重要价值...

    一个简单的银行家算法

    总的来说,"一个简单的银行家算法"项目是理解操作系统中资源管理和死锁预防的好实践。通过编写和运行这个程序,用户可以直观地看到资源分配如何影响系统的安全性,并深入理解银行家算法的工作原理。

    C#如何实现菜单历史列表

    在C#编程中,创建一个菜单历史列表是一个常见的需求,特别是在开发桌面应用程序时,用户可能希望看到他们...在实际项目中,你可以根据具体需求对其进行调整和扩展,例如增加搜索历史记录的功能,或者添加更多细节信息。

    c++编写的很好用的一个录音程序

    文件大小的显示则相对简单,录音程序在保存文件时需要记录文件大小,并将其更新到用户界面上。在C++中,可以使用fstream库进行文件操作,计算已写入的数据量。 至于MP3编码,通常会用到开源的音频编码库,比如LAME...

    JavaMelody JAVA Web项目服务器性能监控工具

    对于异常处理,JavaMelody会记录应用程序中抛出的异常,方便定位和解决问题。另外,它还能够监控系统级别的指标,如CPU使用率、磁盘空间和网络I/O,这些信息对于系统运维人员来说非常宝贵。 集成JavaMelody到你的...

    pintos project2

    这个过程中,他们会遇到各种挑战,如内存泄漏、死锁、资源竞争等问题,这些挑战的解决将对他们的编程思维和技术能力有显著提升。同时,Pintos项目也为学生提供了一个实际操作的平台,使理论知识得以在实践中得到检验...

    操作系统实验-中山大学.rar

    5. **项目6**:这可能是一个关于死锁预防和避免的实验,学生需要理解死锁的四个必要条件,并尝试通过设置资源预分配、银行家算法等方式防止死锁的发生。 6. **项目7**:可能涉及的是调度算法的实现,如FCFS(先来先...

    VC++银行家算法实验报告

    通过在VC++环境下编写和调试一个简单的资源分配模拟程序,不仅能够直观地观察到死锁产生的条件,还能学习如何使用银行家算法有效地防止和避免死锁,从而提升学生对操作系统中资源管理机制的理解。 #### 二、死锁...

    STM32CubeMX+FreeRTOS使用osMessagePut,osMessageGet问题记录的测试代码

    osMessagePut和osMessageGet是FreeRTOS中两个重要的消息队列操作函数,它们使得任务间的通信变得简单且可靠。通过实际的测试代码,我们可以加深对这些概念的理解,并将它们应用到自己的项目中。

    开源项目-lukechampine-stm.zip

    这个项目的核心目标是为Go开发者提供一种简单、高效且易于使用的并发控制机制,以避免传统的互斥锁(mutexes)和条件变量等低级同步原语带来的复杂性。 在Go语言中,STM的工作原理大致如下: 1. **事务开始**:...

    数据库的锁.pdf

    在实际项目中,选择合适的锁策略和级别对于数据库系统的性能至关重要。数据库管理员和开发者需要充分理解锁的工作原理,以及不同锁级别和类型对系统并发性能的影响。合理配置和优化锁机制可以显著提高数据库系统的...

    封锁管理子系统模拟实现java版

    8. **测试与调试**:项目中可能包含单元测试和集成测试,用于验证封锁管理子系统的正确性,同时也可能有日志记录,便于排查问题。 通过阅读和分析项目的源码,我们可以更深入地理解这些概念,并将理论知识应用到...

    ssm_postgresql_事务_log4j.rar

    在SSM与PostgreSQL的结合中,日志记录可以帮助开发者追踪和调试事务处理过程中的问题,如异常信息、SQL执行情况等。 在处理SSM与PostgreSQL的事务时,可能会遇到的问题包括事务隔离级别的选择(读未提交、读已提交...

    数据结构之银行家算法实验报告

    【银行家算法】是用于预防操作系统中死锁问题的一种策略,尤其在多道程序系统中。这个算法由艾兹格·迪杰斯特拉提出,它的核心思想是在资源分配之前预测系统是否能到达安全状态,从而避免导致无法解除的资源竞争状态...

    Java项目开发20例

    6. **多线程**:学习如何创建和管理线程,使用synchronized关键字处理并发问题,理解线程同步和死锁。 7. **JDBC数据库操作**:连接数据库,执行SQL查询,处理结果集,理解预编译的PreparedStatement和事务管理。 ...

    java编写的简单的QQ群聊

    - 多线程环境下,需要关注死锁、活锁和资源竞争等问题,通过调试工具如JVisualVM进行性能分析和调优。 这个简单的QQ群聊项目是一个很好的起点,帮助初学者将理论知识应用于实践,进一步巩固和深化对Java编程、线程...

    银行家算法(适用于操作系统课程设计)

    5. 如果不超过,则添加项目并记录所需资源;否则提示错误。 #### 资源申请流程 1. 用户输入项目名称。 2. 查找项目是否存在。 3. 输入项目需要申请的资源数量。 4. 检查请求的资源是否超过最大限制以及是否超过了...

Global site tag (gtag.js) - Google Analytics