如何解决无响应的服务器

我正在testing基于Java的Web应用程序(Grails),它部署在Tomcat上。 服务器上运行以下服务:

即使我理解,在理想的世界中,这些服务将运行在三个独立的服务器上,但我只想看看我的应用程序如何处理一些负载。 我发现,运行20线程的时间超过40秒,似乎使服务器无响应。 但是,我无法确定导致服务器无响应的原因

当时我将被SSH进入,但当它变得没有响应时,我甚至不能SSH进入机器。 这是从TOP的数据,当它变得没有反应,我甚至不能SSH进入它。 似乎没有说明为什么它会变得没有反应。

在这里输入图像说明

  • 如何debugging导致服务器无响应的原因?

我要做的第一件事是减less任何这些进程可能比操作系统花费更多的CPU或磁盘IO时间的可能性。 我将假设你的操作系统是Linux。

在编辑它们之前,请务必备份任何configuration文件。

通过查看sar数据,您可能能够在崩溃之前获得操作系统行为的一些提示。

 sar -A | more 

一定要寻找内存或CPU使用率攀升。 假设已经安装并启用,可以通过编辑/etc/cron.d/sysstat来更频繁地运行sar。

对于您的进程正在运行的每个服务帐户,可以将以下内容添加到文件末尾的/etc/security/limits.conf中。

 apache soft priority 19 apache hard priority 19 rabbitmq soft priority 18 rabbitmq hard priority 18 mysql soft priority 10 mysql hard priority 10 

然后,在守护进程的每个init脚本中,减less分配给它们的CPU和IO时间。

 cp -p /etc/rc.d/init.d/some_init_script ~/`date '+%Y%m%d.%H%M'`.some_init_script vi /etc/rc.d/init.d/some_init_script 

在脚本的第二行添加以下内容以减lessCPU和IO时间片:

 renice 19 -p $$ > /dev/null 2>&1 ionice -c3 -p $$ > /dev/null 2>&1 

重新启动您的每个服务。

假设sshd仍然没有响应。 如果你安装“屏幕”,那么你可以有vmstat,iotop和其他工具在各种屏幕上运行。 有使用屏幕上的作弊表,所以我不会在这里覆盖。

在这一点上,即使你的服务已经失去控制,你仍然应该有能力ssh到服务器,假设它没有引发恐慌。

您可以进一步限制分配给每个守护进程的资源,方法是将它们固定到特定的内核或CPU。 这可以通过命令“taskset”完成。 man taskset获取更多关于它的用法的细节。

我还应该补充说,这在某些自旋locking条件下不起作用。 如果上述方法无效,则可能需要在虚拟机中运行应用程序,并使用debugging内核或其他debugging工具。