作者jacky951 (藍憶)
看板java
標題[問題] Spring @Transaction 問題
時間Tue Jul 17 11:44:39 2018
版上先進大家好:
最近使用@Transation 遇到一個很奇怪的問題,範例如下:
public void caller(){
log.info("start:{}", LocalDateTime.now());
target.method();
log.info("end:{}", LocalDateTime.now());
}
@Transation(timeout = 3)
public Object method(){
//do some Logic
log.info("process :{}", LocalDateTime.now());
return object;
}
執行記錄大概會是 0 -> 11ms -> 20ms
光是做return 就花了快一半的時間,而且在每個整點的00、15、30、45分
有機會會變成 0 -> 11ms -> 2000ms
已經確認沒有系統排程、程式排程、DB排程
初步懷疑是spring AOP的問題,但理論上應該每次都會耗時很高,
沒甚麼道理每15分鐘固定一次,而且不管在哪台機器上都一樣
執行環境為
docker openJDK8 + Spring Boot + spring MVC + spring DATA (JPA、Redis)
有透過JConsole去看過thread 跟 GC 看起來都正常
thread 有defualt initial 因此沒有變化
GC時間約每10分鐘一次,跟00 15 30 45 對不上。
現在找不到任何頭緒或該怎麼檢測,想請問版上先進還有什麼Idea可以測試?
目前有看到transcation commit的時間比較慢…。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.222.110.31
※ 文章網址: https://www.ptt.cc/bbs/java/M.1531799085.A.9D5.html
※ 編輯: jacky951 (61.222.110.31), 07/17/2018 15:46:54
→ lan1123: Redis persistence? 07/17 19:21
推 adrianshum: Return 花時間算是正常,畢竟那個時候是在commit 07/17 19:45
→ adrianshum: 有沒有什麼profiling tools 可以看慢在哪?不然土炮一 07/17 19:48
→ adrianshum: 點,反正知道什麼時候會出問題,就在那兩秒做幾次thre 07/17 19:48
→ adrianshum: ad dump,應該可以看出端倪 07/17 19:48
→ ssccg: 先把spring和jpa provider的log都開起來看是慢在哪段吧 07/17 20:30
→ jacky951: 稍早的時候有把JPA transcation的log開起來 07/17 21:02
→ jacky951: 確定的是commit的時候DB response卡住,但原因不曉得 07/17 21:03