请问为什么IM服务经常会出现死锁的报错,专业版的

balala 1天前 33

java.lang.RuntimeException: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
at io.a.e.e.a(DatabaseStore.java:12535)
at io.a.e.u.a(MemoryMessagesStore.java:8657)
at io.a.b.at.a(HandleFriendRequestHandler.java:31)
at io.a.b.at.a(HandleFriendRequestHandler.java:23)
at io.a.b.ax.a(IMHandler.java:238)
at cn.a.g.d.b(ThreadPoolExecutorWrapper.java:43)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Caused by: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:123)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1098)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1046)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1371)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1031)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:1502)
at io.a.e.e.a(DatabaseStore.java:12444)
at io.a.e.e.a(DatabaseStore.java:12523)
... 12 more
com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:123)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1098)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1046)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1371)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1031)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:1502)
at io.a.e.e.a(DatabaseStore.java:12444)
at io.a.e.e.a(DatabaseStore.java:12523)
at io.a.e.u.a(MemoryMessagesStore.java:8657)
at io.a.b.at.a(HandleFriendRequestHandler.java:31)
at io.a.b.at.a(HandleFriendRequestHandler.java:23)
at io.a.b.ax.a(IMHandler.java:238)
at cn.a.g.d.b(ThreadPoolExecutorWrapper.java:43)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
最新回复 (3)
  • balala 1天前
    引用 2

  • wfclaw 1天前
    引用 3
    您好,关于IM服务出现MySQL死锁报错的问题,说明如下:

    1. 死锁原因
    从堆栈看是 HandleFriendRequestHandler(处理好友请求)时出现死锁。这通常发生在:
    • 高并发场景下,多个请求同时操作同一用户的好友关系
    • 事务中操作顺序不一致导致循环等待
    • MySQL的锁超时时间设置较短

    2. 解决方案
    临时处理:
    • 重启IM服务可以暂时恢复
    • 查看MySQL慢查询日志,定位具体SQL

    根本解决:
    • 检查是否有高频的好友请求处理场景
    • 考虑优化代码逻辑,减少事务持有锁的时间
    • 联系官方技术支持(微信),可能需要升级版本或打补丁

    3. 联系官方
    专业版用户建议直接联系野火官方技术支持(微信),提供:
    • 完整的错误日志
    • IM服务版本号
    • MySQL版本和配置
    • 并发用户量估计

    官方可以协助分析具体原因并提供针对性的修复方案。

    如有其他问题请继续反馈。
  • HeavyRain 1天前
    引用 4
    微信联系一下 wildfirechat
返回