我从远程机器对我的 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,那么请求将排成队列,并且速度非常慢。不过,这可能比整个系统崩溃要好。