您能否挂起Java应用程序并获取其快照';从应用程序中删除线程?
我正在研究编写在Java应用程序内部运行的监控代码,定期拍摄运行线程的快照,并在每个线程上显示一些调用堆栈信息 理想情况下,这将扩展用于分析和/或监视您能否挂起Java应用程序并获取其快照';从应用程序中删除线程?,java,multithreading,runtime,monitoring,Java,Multithreading,Runtime,Monitoring,我正在研究编写在Java应用程序内部运行的监控代码,定期拍摄运行线程的快照,并在每个线程上显示一些调用堆栈信息 理想情况下,这将扩展用于分析和/或监视 我不想使用外部工具,因为这是出于自我教育的目的 您有没有研究过类的方法,例如Thread.enumerate(),Thread.activeCount(),Thread.getName()?看看ThreadMXBean.dumpAllThreads(boolean,boolean) 您是否尝试过您可以在创建时注册要查看的线程,并使用单独的metr
我不想使用外部工具,因为这是出于自我教育的目的 您有没有研究过类的方法,例如
Thread.enumerate()
,Thread.activeCount()
,Thread.getName()
?看看ThreadMXBean.dumpAllThreads(boolean,boolean)
您是否尝试过您可以在创建时注册要查看的线程,并使用单独的metrics线程进行监视。您可能希望在线程中构建某些度量,例如最近运行时间、当前吞吐量或其他类型的度量的列表。kill-SIGQUIT{java_process}
将在java进程的stdout中转储所有堆栈跟踪。我认为没有办法停止所有线程(从java字节码中)。如果您使用JNI启动JVM本身,可能有一种方法。
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
ThreadInfo[] info = bean.dumpAllThreads(true, true);