【问题标题】:Thread starts and fails to stops with Tomcat. What's happening?线程使用 Tomcat 启动并无法停止。发生了什么?
【发布时间】:2014-05-27 05:37:00
【问题描述】:

我有一个正在运行的 java 多线程程序。我在tomcat服务器上运行它。当线程仍在运行时,一些正在执行的任务,一些仍在等待某些东西返回和各种各样的东西,假设我在这种情况下突然停止服务器..当我这样做时,我在 tomcat 终端上收到警告说一个名为 x 的线程仍在运行并且服务器正在停止,因此这可能会导致内存泄漏。操作系统实际上想在这里告诉我什么?有人可以帮我理解这个吗?我在我的系统上运行了这个程序几次,我突然停止了服务器 3 次,当我这样做时我看到了这个消息。我运行我的服务器了吗? (我的意思是我的系统)。我做了什么很危险的事????

请帮忙。

提前致谢!

【问题讨论】:

  • 请在谷歌搜索后发布来自 Tomcat(复制和粘贴)的确切错误消息。通常,错误中的确切单词,减去特定于您的应用程序的任何内容(如线程的名称),都可以工作。您现在可能已经了解到,错误并不是害怕的理由,但是您通过尝试了解错误来解决问题是正确的。

标签: java multithreading tomcat operating-system


【解决方案1】:

当我这样做时,我在 tomcat 终端上收到警告,说名为 x 的线程仍在运行并且服务器正在停止,因此这可能会导致内存泄漏。操作系统实际上想在这里告诉我什么?

Tomcat(不是操作系统)从这个额外的线程推测您的代码的某些部分派生了一个可能无法正确清理自身的线程。它认为这个线程可能不止一次被分叉,如果你的进程运行很长时间,它可能会填满可用内存,这会导致 JVM 锁定或至少变得非常慢。

我毁了我的服务器吗? (我的意思是我的系统)。我做了什么很危险的事????

不,不。这是关于tomcat进程本身的。它担心这种内存泄漏可能会阻止其作为软件完成其工作的能力——仅此而已。除非您看到多个线程或直到您看到服务器的内存问题(为此使用 jconsole),否则我只会将其视为警告和注意事项。

【讨论】:

    【解决方案2】:

    听起来您的 Web 服务器正在分叉进程,当您停止服务器时这些进程并未终止。这些可能导致内存泄漏,因为它们代表永远不会死的进程,除非您重新启动或使用kill 命令手动终止它们。

    我怀疑你会永久损坏你的系统,除非那些孤立的进程正在做坏事,但这与你停止服务器无关。您可能应该执行ps aux | grep tomcat 之类的操作来查找剩余进程并执行以下操作

    1. 杀死它们,以免它们占用更多系统资源。
    2. 弄清楚为什么当服务器停止时它们仍然存在。这听起来像是一个行为不端的服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 2013-05-02
      • 2010-12-13
      • 1970-01-01
      • 2012-06-24
      • 2012-05-06
      • 1970-01-01
      • 2016-06-07
      相关资源
      最近更新 更多