java—spring有时会在控制器方法执行前后执行一些缓慢的进程吗?

pftdvrlh  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(120)

我有一个在k8s环境中运行的spring启动应用程序。
当我做一些测试来查看我们的应用程序如何处理多个请求时,我注意到应用程序在控制器方法执行之前和之后都浪费了一些时间。应用程序中有一些过滤器,它们在控制器方法执行之前和之后执行,但它们并没有做任何繁重的工作,只是从请求中读取一些信息并删除一些缓存字符串。
我有跟踪设置,所以我可以跟踪应用程序某些部分的执行,主要是外部调用,但出于测试目的,我在其他部分中添加了跟踪。跟踪根范围从位于过滤器链顶部的过滤器开始。
你可以从下面的图片中看到奇怪的行为。在红色中我标记了表示控制器方法的跨距,在黑色中我标记了表示最后两个过滤器跨距的跨距,这两个过滤器位于过滤器链的末端。
在这幅图中我们可以看到,在taas\u tenant\u support\u check fitler(在过滤器链中倒数第二个)完成执行之后,控制器方法的执行在50ms之后开始。
在这幅图中,我们可以看到taas\u remove\u bo\u user\u context filter,它是过滤器链中的最后一个,在控制器方法完成执行后大约80ms执行。
只有当应用程序在k8s环境中运行时,在我的本地计算机上,在相同的负载(当前只有50个并行请求)下,才会捕捉到这种行为。这种情况永远不会发生。
运行我们的应用程序的pod最多使用1个cpu和2gb内存。
我也在本地机器上的docker容器中运行了一个应用程序,具有类似的资源限制,但是没有记录这种奇怪的行为。
跟踪范围是批量导出的,导出程序是在主应用程序的独立线程中运行的,我不认为这会减慢我们的速度。
使用调试器,我浏览了spring的源代码,以查看在执行控制器方法之前和之后发生了什么,但是我没有发现任何可能导致这种行为的东西。
有人知道这里发生了什么吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题