如何诊断具有空闲应用程序的 Web 服务器为何变得无响应?
How to diagnose why a web server with idle applications becomes unresponsive?
我有一个 Digital Ocean droplet(512MB RAM,20GB SSD 磁盘,Ubuntu 13.10 x64)
- 一个MongoDB实例和
- 一个Tomcat 7台服务器
运行.
在 Tomcat 服务器上,安装了以下应用程序
- 基于 Apache CXF 的应用程序,它接受处理 Web 服务请求,与数据库交互并执行计划的作业,
- Vaadin 应用程序,
- JSF (Primefaces) 应用程序和
- Psi Probe.
当我
- 重启Tomcat,
- 使用 Vaadin and/or JSF 应用程序,
- 然后几个星期在那台机器上什么都不做(那段时间它基本上是闲置的),
- 然后尝试打开 JSF and/or Vaadin 应用程序,
我发现网站没有响应(在浏览器中输入 URL 后没有任何显示)。
当我重新启动 Tomcat (sudo service tomcat7 restart
) 时,一切又恢复正常了。我在 Tomcat 日志中没有看到任何明显的问题。
我怎样才能知道,
- 问题是出在 Tomcat 端(其中一个应用程序即使处于空闲状态也会消耗太多资源)还是出在 OS 端(机器上没有任何反应,因此 OS 将自己置于 "hibernating" 模式)和
- 如果问题出在 Tomcat,究竟是哪个应用程序导致的?
请从上到下开始。
then try to open the JSF and/or Vaadin application,
I find the site unresponsive (nothing is displayed after I enter the
URL in the browser).
- 重启前检查服务是否还在运行
sudo service tomcat7 status
and/orps -ef | grep tomcat
- 检查
netstat -patune | grep <portnumber, e.g. 443>
服务器是否正在侦听配置的端口
- 如果请求到达服务器,请检查您的 httpd/Apache/Tomcat 访问日志,如果是,请检查是否存在与请求相关的错误或超时
- 检查数据库连接是否仍然可用
- 要强制生成一些错误日志,请尝试更改 Tomcat 连接池配置的 maxIdle、maxActive 和 maxWait 属性。 maxWait 默认值为 -1,有时在这几周内创建的连接将永远等待。
@Patrick 提供了一些出色的基本测试。
我注意到您只有 512 MB 的 RAM。使用一些相当强大的软件,例如 tomcat,再加上 MongoDB,您的机器可能会超载。
基于此,我会提出一些额外的检查事项:
sudo 免费
应该会告诉您正在使用多少内存,以及您使用了多少交换 space。
sudo 顶部
会告诉您哪个进程使用的内存最多。您可能希望按内存对 top 的输出进行排序(默认通常按 CPU 利用率)。
最重要的是,检查 /var/log 中的日志文件(尤其是 /var/log/messages)。您可能会发现内核终止了您的进程之一的迹象(可能 tomcat)。
我有一个 Digital Ocean droplet(512MB RAM,20GB SSD 磁盘,Ubuntu 13.10 x64)
- 一个MongoDB实例和
- 一个Tomcat 7台服务器
运行.
在 Tomcat 服务器上,安装了以下应用程序
- 基于 Apache CXF 的应用程序,它接受处理 Web 服务请求,与数据库交互并执行计划的作业,
- Vaadin 应用程序,
- JSF (Primefaces) 应用程序和
- Psi Probe.
当我
- 重启Tomcat,
- 使用 Vaadin and/or JSF 应用程序,
- 然后几个星期在那台机器上什么都不做(那段时间它基本上是闲置的),
- 然后尝试打开 JSF and/or Vaadin 应用程序,
我发现网站没有响应(在浏览器中输入 URL 后没有任何显示)。
当我重新启动 Tomcat (sudo service tomcat7 restart
) 时,一切又恢复正常了。我在 Tomcat 日志中没有看到任何明显的问题。
我怎样才能知道,
- 问题是出在 Tomcat 端(其中一个应用程序即使处于空闲状态也会消耗太多资源)还是出在 OS 端(机器上没有任何反应,因此 OS 将自己置于 "hibernating" 模式)和
- 如果问题出在 Tomcat,究竟是哪个应用程序导致的?
请从上到下开始。
then try to open the JSF and/or Vaadin application,
I find the site unresponsive (nothing is displayed after I enter the URL in the browser).
- 重启前检查服务是否还在运行
sudo service tomcat7 status
and/orps -ef | grep tomcat
- 检查
netstat -patune | grep <portnumber, e.g. 443>
服务器是否正在侦听配置的端口 - 如果请求到达服务器,请检查您的 httpd/Apache/Tomcat 访问日志,如果是,请检查是否存在与请求相关的错误或超时
- 检查数据库连接是否仍然可用
- 要强制生成一些错误日志,请尝试更改 Tomcat 连接池配置的 maxIdle、maxActive 和 maxWait 属性。 maxWait 默认值为 -1,有时在这几周内创建的连接将永远等待。
@Patrick 提供了一些出色的基本测试。
我注意到您只有 512 MB 的 RAM。使用一些相当强大的软件,例如 tomcat,再加上 MongoDB,您的机器可能会超载。
基于此,我会提出一些额外的检查事项:
sudo 免费
应该会告诉您正在使用多少内存,以及您使用了多少交换 space。
sudo 顶部
会告诉您哪个进程使用的内存最多。您可能希望按内存对 top 的输出进行排序(默认通常按 CPU 利用率)。
最重要的是,检查 /var/log 中的日志文件(尤其是 /var/log/messages)。您可能会发现内核终止了您的进程之一的迹象(可能 tomcat)。