为grails应用程序识别Jprofiler中的热点

为grails应用程序识别Jprofiler中的热点,grails,jprofiler,Grails,Jprofiler,下面给出了评测我的应用程序时CPU视图中调用树和热点的屏幕截图。我可以说cglib的MethodInterceptor.intercept()是一个热点吗?这不是我编写的代码,甚至不是直接调用它,而是grails内部调用。如果是,如何修复 我知道我通常应该只查看“可运行”线程状态。但是,这仅在线程状态设置为“等待”或“所有状态”时显示为热点。这是否意味着intercept()正在等待某个事件发生?为什么所有流中都有相同的方法在等待?如何解决这个问题 MethodInterceptor和Orde

下面给出了评测我的应用程序时CPU视图中调用树和热点的屏幕截图。我可以说cglib的MethodInterceptor.intercept()是一个热点吗?这不是我编写的代码,甚至不是直接调用它,而是grails内部调用。如果是,如何修复

我知道我通常应该只查看“可运行”线程状态。但是,这仅在线程状态设置为“等待”或“所有状态”时显示为热点。这是否意味着intercept()正在等待某个事件发生?为什么所有流中都有相同的方法在等待?如何解决这个问题


MethodInterceptor和OrderService之间存在未分析的类。尝试切换到“采样”并禁用所有过滤器,然后再次查看热点视图。

如果我没有弄错的话,是调用您真正服务方法的代理。创建代理是为了将您的服务方法包装到事务中。我不明白59次OrderService.pay()调用如何花费1570秒,而在树中,相同的59次OrderService.pay()调用如何花费7101毫秒。我应该在web服务器或应用程序中调整哪些参数,以便不存在等待或至少减少等待?MethodInterceptor和OrderService之间存在未分析的类。尝试切换到“采样”并禁用所有过滤器,然后再次查看热点视图。非常感谢,Ingo。你的建议帮我找到了问题所在。默认情况下,Grails中的所有服务都是事务性的。因此,spring框架的事务类已经编织到代码中,它正在等待连接。我不需要我的webapp的很多部分都是事务性的。因此,显式禁用事务解决了这个问题。再次感谢。@IngoKegel,我想把你的评论作为这个问题的答案。但不幸的是,我看不到这样做的选择。你能发表你的评论作为这个问题的答案吗,这样我就可以把它标记为已回答。