java - 如何获取 Java 程序特定行的堆栈跟踪

标签 java spring performance jvm stack-trace

我们如何获取 Java 中成功执行的行的堆栈跟踪?需要调试问题。

我不需要普通的堆栈跟踪,我想知道特定行在幕后正在做什么。

BeanFactory factory = new XmlBeanFactory(new FileSystemResource("/opt/data/ws_server.xml"));    
serviceHelper = (ServiceHelper)factory.getBean("serviceHelper");
//Assuming no exceptions, print/view stack trace of above line (factory.getBean). 

我想查看factory.getBean的堆栈跟踪 - 如下所示,以了解factory.getBean正在做什么。

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:757)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:721)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:384)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
- locked <0xffffffff58100608> (a java.util.concurrent.ConcurrentHashMap)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)

最佳答案

最后,您需要某种仪器。换句话说:您想要告诉 jvm 跟踪调用堆栈,更重要的是,以编程方式提供该信息。

即使您只希望针对特定方法发生这种情况,jvm 仍然必须跟踪所有方法调用,因为它无法知道最终是否调用了要跟踪的方法之一。因此,无法在不影响性能的情况下轻松跟踪方法调用。我知道的工具可以将性能影响保持在合理的水平,例如 XRebel,用于以后的评估,而不是用于程序消耗。

换句话说:挂起情况的唯一解决方案是:

  • 进行线程转储并分析它
  • 在代码运行时进行大量日志记录/跟踪,以分析是否发生挂起

需要明确的是:您所要求的,在事实发生后获取已执行代码的堆栈跟踪是不可能实现的!

关于java - 如何获取 Java 程序特定行的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55292843/

相关文章:

java - hazelcast 未与其他 ip 集群

java - Spring MVC - @ExceptionHandler 基于 Accept header

java - 如何使用 Spring Data 从 Spring Boot 中的实体中选择几个字段?

java - 另一个应用程序中的 Activity 和服务之间的通信

C++ & DirectX - 几何问题

java - 使用Java代码在Unix服务器上创建一个具有读写可执行权限的文件夹?

java - 如何检查事件是否已在干扰器环形缓冲区中

java - 使用原始值填充表单的验证失败文件输入字段以便其可以显示在 JSP 文件中的正确方法是什么?

java - 如何在 Spring WebFlux @ExceptionHandler 中访问 RequestBody?

performance - MATLAB : access loaded MAT file very slow