我有一个奇怪的问题。 每当我停止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运行uptime或top你可能会看到当ssh没有响应的负载数字超过10。 正常使用时,他们可能会徘徊在2以下。
运行free或top看你的内存使用情况,你可能会看到很多交换。
一旦你发现了根本症状,你可以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会话,并检查问题是否仍然发生,并影响所有的会议?