我的服务器崩溃了,我该如何查明发生了什么?

我的服务器崩溃了,我该如何查明发生了什么?

我从远程机器对我的 Ubuntu VPS 运行了 100 个并发请求

ab -n 100 -c 100 http://...

而且,正如我所怀疑的那样,服务器“崩溃了”。我仍然可以 ping 它,并且它响应非常快(约 50 毫秒)。但我无法ssh进入它或访问 Web 服务器。我之前运行了 1000 个请求,其中 10 个是并发的,它响应迅速且可靠,每秒运行约 80 个请求。

快进五分钟我就可以登录了,网络服务器运行良好,一切又恢复完美。

  • Uptime 告诉我 load_average 是 0.06, 0.04, 0.05,并且我还有四分之一 GB 的内存可用(总共 512MB)。运行后,netstat -n许许多多如下行:

    tcp        0      0 127.0.0.1:9311          127.0.0.1:35030         TIME_WAIT  
    tcp        0      0 127.0.0.1:5984          127.0.0.1:54384         TIME_WAIT  
    tcp        0      0 127.0.0.1:9311          127.0.0.1:35024         TIME_WAIT
    
  • 该服务器运行 nginx 作为反向代理,其后方有少量 cherrypy 服务器。这些服务器在 8000 到 9000 之间的端口上运行,并且仅监听127.0.0.1

100 个并发请求对我来说似乎不算多,尽管这是我的托管公司提供的最低规格服务器。我该如何调查服务器崩溃时发生了什么?


服务器崩溃后没有重新启动。没有消息写入我的kern.log,并且服务器前面没有防火墙。

答案1

您需要安装一些程序来记录系统的性能数据,并在进行这些基准测试时运行它。collectd 在这方面非常受欢迎,但需要预先进行大量学习。您可以安装“sysstat”以获取“sar”命令,但粒度只有 10 分钟,因此可能无法捕获所有问题。您还可以登录并运行“vmstat 5”之类的程序,它将每 5 秒打印出有关 IO/负载/内存的统计数据。

如果您使用 Apache pre-fork(默认)和 PHP,那么对于小型服务器来说,100 已经太多了。因为这将需要 100 个并发进程来满足请求。如果您将 MaxClients 设置为低于 100,那么请求将排成队列,并且速度非常慢。不过,这可能比整个系统崩溃要好。

相关内容