我有一个正在运行的java多线程程序。我在tomcat服务器上运行它。当线程仍在运行时,一些正在执行的任务,一些仍在等待某些事情返回以及所有类型的事情,假设我在这种情况下突然停止服务器..当我在tomcat终端上收到警告时说一个名为x的线程仍在运行且服务器正在停止,因此这可能会导致内存泄漏。操作系统实际上试图在这里告诉我什么?谁能帮我理解这个?我在我的系统上运行这个程序好几次,我突然停止了3次服务器,当我这样做时,我已经看到了这个消息。我运行过我的服务器吗? (我的意思是我的系统)。我做了一件非常危险的事吗????
请帮忙。
提前致谢!
答案 0 :(得分:0)
听起来您的Web服务器正在分叉在您停止服务器时未终止的进程。这些可能会导致内存泄漏,因为它们代表的过程永远不会消失,除非您使用kill
命令重新启动或手动终止它们。
我怀疑你会永久性地损坏你的系统,除非那些孤立的进程做坏事,但这与你停止服务器无关。您可能应该执行ps aux | grep tomcat
之类的操作来查找剩余的进程并执行以下操作
答案 1 :(得分:0)
当我这样做时,我在tomcat终端上收到一条警告,说明一个名为x的线程仍在运行且服务器正在停止,这可能会导致内存泄漏。操作系统实际上试图在这里告诉我什么?
Tomcat(不是操作系统)猜测这个额外的线程,你的代码的某些部分分叉了一个可能无法正常清理自己的线程。它认为这个线程可能不止一次分叉,如果你的进程运行了很长时间,它可能会填满可用内存,导致JVM锁定或至少变慢。
我毁了我的服务器吗? (我的意思是我的系统)。我做了一件非常危险的事吗????
不,不。这是关于tomcat进程本身。它担心这种内存泄漏可能会阻止它作为软件完成其工作的能力 - 仅此而已。除非您看到多个线程,或者直到您看到服务器出现内存问题(使用jconsole),否则我只会将其作为警告和警告。