java - 当我们在应用程序日志中有线程名称时,如何识别线程启动的 Java 代码

标签 java multithreading tomcat6

我在我的旧应用程序中的日志下方,我尝试使用 .setName 进行搜索,因为我们使用 thread.setName 方法设置了线程名称,但无法看到它。我怀疑它是由应用程序启动的,我正在搜索所有 .java 文件。

Jan 30, 2014 1:00:29 AM org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads SEVERE: The web application [/MyWebApp] appears
to have started a thread named [Control] but has failed to stop it.
This is very likely to create a mem ory leak. Jan 30, 2014 1:00:29 AM
org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/MyWebApp] appears to have started a
thread named [MultiThreadedHttpConnectionManager cleanup] but has
failed to stop it.

无法理解这些线程(Control 和 MultiThreadedHttpConnectionManager)从哪里开始,因此我可以修改代码来停止这些线程。

编辑:我的同事回答了其中的一部分,MultiThreadedHttpConnectionManager 是 BUG在 Axis2 中

当我在 Debug模式下运行 tomcat 时,我看到一些守护线程和另外两个线程(主线程、控制线程)。控制线程的命令行参数显示“org.apache.catalina.startup.Bootstrap start”。看起来 tomcat 正在启动这个线程,但如果是这种情况,为什么 tomcat 会为此给出错误日志?

最佳答案

我得到了这个问题的答案和 2 个简单的解决方案

  1. 使用 Kill -QUIT pid 获取线程转储并查看堆栈跟踪,它 提供堆栈跟踪并说明可运行/线程类到底是什么 名字是。
  2. 另一种选择是在 eclipse 中启动应用程序,请参阅 get 来自 Debug模式的信息。我们在哪里可以看到所有线程是什么 运行。

关于java - 当我们在应用程序日志中有线程名称时,如何识别线程启动的 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21850196/

相关文章:

Java 线程使用 websocket 更改数据和向用户提供数据的线程

tomcat - 如何将Tomcat的端口从8080改成80?

java - PermGen 空间内存泄漏

java - NFC标签上的图片

java - Hibernate Session如何处理并发性能

python - 在 python 中的类中启动无限循环线程后继续执行代码

tomcat - 域访问 Web 应用程序 - Tomcat

java - 与音频服务一起使用时 mContext 类型不匹配

java - 3D "free"相机的三角学

java - 正则表达式如何将字符串的一部分替换为另一个字符串