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

我有一个奇怪的问题。 每当我停止Tomcat,SSH变得非常缓慢,几乎完全没有响应。 SSH需要一分钟甚至更多时间才能接受任何命令。 当我终于使Tomcat重新开始时,一切都恢复正常。

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

我看到的一件事是,当我停止Tomcat top显示了100%CPU的ksoftirqd/X进程。 这可能是问题吗?

内核版本是: 2.6.18-308.11.1.el5

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

任何想法为什么发生这种情况?

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

检查你的负载,运行uptime运行uptimetop你可能会看到当ssh没有响应的负载数字超过10。 正常使用时,他们可能会徘徊在2以下。

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

一旦你发现了根本症状,你可以search为什么是“tomcat交换关机”或“tomcat高负载”这可能是因为它试图写入一些东西存储在caching或交换到磁盘。 你的tomcat jvm max heap size是否大于你的内存量?

在创buildDoSscheme时,可能会连接到您的Web应用程序不断重试。

这可能都是特定于您的Web应用程序,所以使用一般条款。

我知道这不是“最佳做法”,但是,我build议你通过ssh远程重置tomcat并将输出设置为null:

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

(你可以用上面的命令replace你用来重新启动tomcat的命令)。

这是一个解决方法,而不是一个解决scheme。 你可以试试这个连接到其他ssh会话,并检查问题是否仍然发生,并影响所有的会议?