停止 Tomcat 后 SSH 无响应,许多 ksoftirqd CPU 占用率

停止 Tomcat 后 SSH 无响应,许多 ksoftirqd CPU 占用率

我遇到了一个奇怪的问题。每次我停止 Tomcat,SSH 就会变得非常慢,几乎完全没有响应。SSH 需要一分钟甚至更长时间才能接受任何命令。当我最终再次启动 Tomcat 时,一切都恢复正常。

这发生在一个非常繁忙的服务器上。问题是我需要经常因为应用程序升级而停止 Tomcat。通常升级需要几秒钟,但这里却需要将近 10 分钟,因此我们经历了不必要的停机。

我发现当我停止 Tomcat 时,top很多ksoftirqd/X进程的 CPU 占用率达到 100%。这可能是问题所在吗?

内核版本是:2.6.18-308.11.1.el5

Red Hat 版本是:Red Hat Enterprise Linux Server release 5.9 (Tikanga)

知道为什么会发生这种情况吗?

答案1

我知道这不是“最佳实践”,但是,我建议您通过 ssh 远程重置 tomcat 并将输出设置为 null:

ssh your_server '/etc/init.d/tomcat restart > /dev/null 2>&1'

(您可以用重新启动 tomcat 时使用的等效命令替换上述命令)。

这是一种解决方法,而不是解决方案。您可以在连接到其他 ssh 会话时尝试此操作,并检查问题是否仍然存在并影响所有会话?

答案2

ssh 连接缓慢/ssh 延迟是高负载的症状。高负载通常是由 io 阻塞引起的,而 io 阻塞通常是由交换引起的。

要检查负载,请运行uptime,否则top当 ssh 没有响应时,您可能会看到负载数字超过 10。在正常使用期间,它们可能会徘徊在 2 以下。

运行freetop查看您的内存使用情况,您可能会看到很多交换。

找到根本原因后,您就可以搜索“tomcat 在关机时进行交换”或“tomcat 高负载”的原因,这可能是因为它试图将存储在缓存或交换中的某些内容写入磁盘。您的 tomcat jvm 最大堆大小是否大于您拥有的内存量?

也许当您的 web 应用程序发生故障时,连接到它的某些东西会不断重试,从而造成 DoS 场景。

这可能都特定于您的 Web 应用程序,因此请使用通用术语。

相关内容