求解 springboot+mysql 随机出现的异常延迟

Plumes · 2024-9-13 17:29:42 · 330 次点击
两行紧挨着的代码,很简单的根据 id 更新一行数据,然后打印函数执行到此时的耗时

https://i.imgur.com/PkV4oaY.png


打印出来的日志如下

https://i.imgur.com/pQy6GQR.png


正常情况下两个打印出来的耗时差值应该是 10ms 以内
但是每天会随机出现几个时间点,两个耗时差值会大于 1s 甚至 10 ~ 20s
日志中可以看到并不是语句执行出现耗时,mybatis 已经把执行结果打印出来了
耗时出现在语句执行之后,但是出现结果之后应该就立即到打印日志了,这之间没有其他代码了,没明白这个延时是怎么产生的,求助
举报· 330 次点击
登录 注册 站外分享
21 条回复  
me1onsoda 小成 2024-9-13 17:35:41
你这样算时间是极不靠谱的,编译器会对指令重排序
31415926535x 小成 2024-9-13 19:25:53
@Plumes 测试环境可重试的话,尝试用 arthas 抓一下看看是哪个方法的问题
v2hh 小成 2024-9-13 19:28:31
是不是那个时间点数据库连接池占满了
hubqin 小成 2024-9-13 20:49:59
会不会集群或网络里面有两个 mysql 实例,形成了负载均衡,其中一个是性能较差的
JYii 小成 2024-9-13 21:04:20
代码硬看不出问题的话,看一下时段的主机、服务、数据库的情况
sagaxu 初学 2024-9-13 21:11:14
把 GC 日志也开了,full gc 也会引起类似情况。既然是每天的 16:10 分左右,那要排查下四点之后有没有计划任务,不局限于这个进程。
trzzzz 小成 2024-9-13 21:15:03
如果 op 用的 druid ,可能耗时在 druid 的获取连接和归还连接那边。jstack 配合 arthas 抓一下吧
mark2025 小成 2024-9-13 21:25:34
备份进程导致高 io ?
falsemask 小成 2024-9-13 21:33:09
1.数据库用了连接池吗?
2.更新会有行锁吗?
123下一页
返回顶部