Re: [问题] Spring @Transaction 问题

楼主: reon (Traveler)   2018-10-01 01:30:11
※ 引述《jacky951 (蓝忆)》之铭言:
: 版上先进大家好:
:   最近使用@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的时间比较慢…。
时间有点久了~不知道你解了没~
根据我的经验 你的问题应该是出在Connetion Pool~
要厘清点的
1.你Database的Connection pool 有没有设定正确? 因为如果你的Pool
没有活的conneciton 可以用,就会导致要重新建connection,
所以速度会很慢~
设定好Connection pool,并保持pool内的connection 有效性
和控制好pool的connection 数量,应该就可以解决你的问题。
2.如果有设定正确 那要检查一下 你的程式和DB之间是否有 Firewall,
Firewall 设定可能会看connection 太久会自动断掉
但程式这边conneciton pool却以为connection还没死~~
不过这通常是会出现connection timeout 的问题
作者: GGing (小轩轩)   2018-10-05 07:07:00
也可改用 Spring boot 2.0 以上的版本,使用 Springjdbc 内建 hikari 超快

Links booklink

Contact Us: admin [ a t ] ucptt.com