当前位置: 首页 > 面试题库 >

如何获取正在运行的应用程序的Java调用堆栈

公西培
2023-03-14
问题内容

我正在研究非常庞大的基于Java
Web的应用程序。由于在开发过程中没有完成正确的日志记录,因此我很难设置断点并调试应用程序,因为我不知道执行顺序。在执行一些操作之后,是否有任何机制可以获取正在运行的Java应用程序的完整调用堆栈。

我在网上搜索了很长时间,但无法找到具体的解决方案。如果有东西请给我建议。谢谢


问题答案:

方法1:从命令行使用Jstack实用程序(JDK发行版的一部分)。

方法2:将信号3发送到Java进程,它将在stdout上转储堆栈跟踪。

方法3:从应用程序内部调用Thread.getAllStackTraces():

public class StackTraceDumper
{
    public static dumpAllStackTraces ()
    {
        for (Map.Entry <Thread, StackTraceElement []> entry: 
            Thread.getAllStackTraces().entrySet ())
        {
            System.out.println (entry.getKey ().getName () + ":");
            for (StackTraceElement element: entry.getValue ())
                System.out.println ("\t" + element);
        }
    }
}

然后StackTraceDumper.dumpAllStackTraces()在需要转储堆栈跟踪的位置使用。



 类似资料:
  • 问题内容: 我确实有一个jenkins实例,它陷入了某种无休止的循环,没有任何可见的活动。 我可以获得正在运行的进程的信息,那么如何生成可用于错误报告的跟踪? 我在linux上运行。 问题答案: 尝试使用jstack。它会为您提供线程正在执行的操作的完整列表。它所需要的只是进程pid。

  • 问题内容: 我正在使用log4j创建一个Java应用程序。我给出了配置log4j文件的绝对路径,还给出了生成的日志文件(生成此日志文件的位置)的绝对路径。我可以通过以下方式在运行时获取Java Web应用程序的绝对路径: 但是在普通的Java应用程序中,我们可以使用什么呢? 问题答案: 尝试;

  • 问题内容: 我有这个Python应用程序,它有时会卡住,我找不到位置。 有什么方法可以让Python解释器向您显示正在运行的确切代码吗? 某种动态堆栈跟踪? 问题答案: 我有用于以下情况的模块-进程将长时间运行,但有时由于未知且不可复制的原因而卡住。它有点hacky,并且只能在unix上运行(需要信号): 要使用它,只需在程序启动时在某个时候调用listen()函数(您甚至可以将其粘贴在site.

  • 我有一个正在运行的Spark应用程序,它占据了所有核心,而我的其他应用程序将不会被分配任何资源。 我做了一些快速的研究,人们建议使用YARN kill或 /bin/spark-class来杀死命令。然而,我使用的是CDH版本, /bin/spark-class根本不存在,YARN kill应用程序也不起作用。 有人能和我一起吗?

  • 我们有几个Java独立的应用程序(以Jar文件的形式)在多个服务器上运行。这些应用程序主要在系统之间读取和流式传输数据。我们主要在开发中使用Java8。我最近负责。我的主要功能是管理和维护这些应用程序。 目前,我通过访问这些服务器手动检查这些应用程序,检查应用程序是否正在运行,有时会运行一些数据库查询以查看应用程序是否开始提取数据。我的问题是,在许多情况下,其中一些应用程序由于数据问题或边缘情况而