21号开始突然发现,项目出现大量事务超时锁住(业务没有激增,服务器、数据库负载都不高),刚开始只是高并发接口有个更新read_log表的业务有超时锁住的情况(该表也确实大,几千万的量), 我试着把高并发接口更新操作暂时停止了,不再更新read_log表,但是,大概过个几分钟,整个项目所有其他涉及到更新数据库表操作的接口也都出现事务超时锁住的情况,哪怕是最简单的登录接口(登录用户更新下用户登录时间)。
我现在完全是蒙,不知道从哪里下手来解决,如果是单个接口,我试着改改还行,现在整个项目所有涉及到更新操作的接口都有.....就觉似乎不是业务代码的问题
webman重启可以短暂恢复下,几分钟后又会大面积事务超时......
数据库买的阿里云的高可用数据库, 问了阿里云客服,客服只说是业务代码问题,白问......
希望大神可以帮忙提供下,解决这类问题的思路,哪些地方可能出问题,从哪里去分析下问题
应该是有控制器没提交事务导致的,安装 webman/log 会自动记录并回滚没提交的事务,能够防止事务死锁,也方便你们排查问题
记得restart重启
该插件,确实有效果啊~~~日志里如何查看哪个控制器对应的事务没有提交?
Uncommitted transaction 关键字
哈哈,奇怪的事情.....完全搜不到uncommitted 关键词, 但是目前确实没有事务超时的问题复发~~~
大写U
也没有!!!
webman-xxx.log 里,如果还没有可能还没发生
确实webman-xxx.log里查的,再观察一段时间吧
又是一个事务 不加try catch 的
这两天.....webman/log插件装了就正常,日志里也没有Uncommited 关键词......还有其他什么问题会导致这种问题吗
从描述上看就是有代码没提交事务导致的。
进入到webman目录,执行
grep Uncommited ./runtime/logs -Rn
或者
grep transaction ./runtime/logs -Rn
如果确实都没有,可能是业务bug被你们修复了。
既然问题是21号开始的,看下那几天提交了哪些代码做了哪些操作。
基本上面说的情况,我补充一下:
1.在进一步可能就是死循环,导致进程堵塞了
2.看workerman.log,里面应该会有进程退出的日志,可以吧那个时间段的日志发出来