gpt4 book ai didi

java - 在运行的 Java 应用程序中查找并显示所选包(通过正则表达式)的线程跟踪

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:50 26 4
gpt4 key购买 nike

我的问题来自实际实践:我有一个应用程序,它依赖于外部(网络)服务。如果某些服务无法访问,我的应用程序就会卡住,我不明白问题从何而来。

我自己不编写应用程序,如果出现问题,源代码不会使用日志记录。

我运行jconsole并查看所有带有跟踪的线程(就像在我之前针对Windows native 应用程序的工作中使用procexp执行此操作一样)。但有 120 个线程!!

所以我想在跟踪中找到一些类(或包/类的正则表达式模式)的线程并打印该跟踪。所以我找到了网络等待发生的地方。

jconsole 应用程序表明这在理论上是可行的(但我真的不希望点击 jconsole 界面中的所有 120 个线程,我通过眼睛搜索我的包)。

我需要运行完整的调试器jdb吗?我是否需要使用一些选项来启动我的应用程序(实际上是 Jboss 应用程序服务器中的 Spring 应用程序)以允许检索此类信息?

我是 Emacs 的老用户,因此通过命令行实用程序转储带有本地运行应用程序痕迹的所有线程也可以解决我的问题。

我更喜欢连接到正常(没有任何调试调整)运行的应用程序,因为这似乎没有必要。

最佳答案

我运行jvisualvm访问“线程”选项卡并按“线程转储”按钮并获取询问信息!!

因此我可以将报告保存到文件并使用正则表达式在 Emacs 中执行搜索。

我只是忘记了 jconsole 已弃用,因为最近才回到 Java 世界(从低级 C 世界)。

但是请填写免费内容,将我指向非交互式命令行解决方案...

UPDATE kill -QUIT $pid 使 Java 进程将线程跟踪转储到 stdout。 jps -l 帮助查找Java进程。如果重新定义了标准输入(Tomcat AS 等)- 检查 AS 日志!

关于java - 在运行的 Java 应用程序中查找并显示所选包(通过正则表达式)的线程跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13492274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com