arthas icon indicating copy to clipboard operation
arthas copied to clipboard

trace spring intercept时不能正常工作

Open wangliguang517 opened this issue 1 year ago • 11 comments

首先我trace我想看的入口 image 找到了耗时的地方,发现是他上层的intercept:org.springframework.cglib.proxy.MethodInterceptor:intercept

但是再往下跟以后, trace org.springframework.cglib.proxy.MethodInterceptor intercept --listenerId 21 就乱了。PS:实际还有比这更乱的 image

wangliguang517 avatar Nov 06 '23 09:11 wangliguang517

参考下这个,要理解spring poxy是怎么工作的。 https://github.com/alibaba/arthas/issues/1424

hengyunabc avatar Nov 06 '23 09:11 hengyunabc

参考下这个,要理解spring poxy是怎么工作的。 #1424

被代理对象我是知道的,现在是intercept耗时,但是再继续跟入,没法达到trace的效果

wangliguang517 avatar Nov 06 '23 09:11 wangliguang517

参考下这个,要理解spring poxy是怎么工作的。 #1424

被代理对象我是知道的,现在是intercept耗时,但是再继续跟入,没法达到trace的效果

直接找到原始的函数再 trace,本质上 proxy 还是要调用原始函数的。 直接 trace proxy相关的代码,所有proxy 的结果都会打印,当然乱了。

hengyunabc avatar Nov 06 '23 09:11 hengyunabc

参考下这个,要理解spring poxy是怎么工作的。 #1424

被代理对象我是知道的,现在是intercept耗时,但是再继续跟入,没法达到trace的效果

直接找到原始的函数再 trace,本质上 proxy 还是要调用原始函数的。 直接 trace proxy相关的代码,所有proxy 的结果都会打印,当然乱了。

我现在发现的问题是原始函数不耗时。上面的intercept耗时

wangliguang517 avatar Nov 06 '23 09:11 wangliguang517

image

为啥没有打印最耗时出的操作,只打印了占1.93%耗时的子操作

lijian500234 avatar Nov 06 '23 09:11 lijian500234

image

为啥没有打印最耗时出的操作,只打印了占1.93%耗时的子操作 和我的问题差不多。这其实已经能定位intercept耗时了

但是再往下继续就查不了了

wangliguang517 avatar Nov 07 '23 03:11 wangliguang517

image 我也遇到了这样的问题 怎么进一步排查耗时问题呢?

ykrenz avatar Jan 03 '24 02:01 ykrenz

mark一下,我也遇到该问题了。原始执行方法耗时并不长,才11ms。但是trace打印出来的

---[99.70% 124.742957ms ] org.aspectj.lang.ProceedingJoinPoint:proceed() +---[99.82% 124.393074ms ] org.springframework.cglib.proxy.MethodInterceptor:intercept()

只能追踪到AOP,然后调用到joinPoint.proceed()方法。直接用trace追踪原始方法也只能打印出一部分。不知道剩余的耗时被谁占用了。 image 看不到剩余的部分耗时,就很捉急,哈哈

xqj-0511 avatar Jan 26 '24 08:01 xqj-0511

我也碰到过类似情况了,最后是在本地用IDEA的profiler看了带总时间的火焰图才发现,我的场景里这个切面是事务切面,事务切面在等待从连接池里面取连接。。。

Mother-Ship avatar Apr 11 '24 06:04 Mother-Ship

怎么理解呢? 多线程操作的时候,在等待资源的耗时吗?

hjy30312 avatar May 09 '24 07:05 hjy30312

mark一下,我也遇到该问题了。原始执行方法耗时并不长,才11ms。但是trace打印出来的

---[99.70% 124.742957ms ] org.aspectj.lang.ProceedingJoinPoint:proceed() +---[99.82% 124.393074ms ] org.springframework.cglib.proxy.MethodInterceptor:intercept()

只能追踪到AOP,然后调用到joinPoint.proceed()方法。直接用trace追踪原始方法也只能打印出一部分。不知道剩余的耗时被谁占用了。 image 看不到剩余的部分耗时,就很捉急,哈哈

大佬解决了吗

Richerlv avatar Aug 08 '24 08:08 Richerlv