Ste*_*zzo 5 server networking nginx webserver
在远程机器上,我对我的 Ubuntu VPS 运行了 100 个并发请求
ab -n 100 -c 100 http://...
Run Code Online (Sandbox Code Playgroud)
而且,正如我怀疑的那样,服务器“崩溃”了。我仍然可以 ping 它,它的响应速度非常快(~50 毫秒)。但我无法ssh进入或访问网络服务器。我之前用 10 个并发运行了 1000 个请求,它响应快速可靠,每秒运行大约 80 个请求。
快进五分钟,我可以登录,网络服务器运行良好,一切又完美了。
正常运行时间告诉我 load_average 是 0.06, 0.04, 0.05,而且我还有 1/4 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
Run Code Online (Sandbox Code Playgroud)该服务器将 nginx 作为反向代理运行,其背后有一些cherrypy 服务器。这些服务器在 8000 到 9000 之间的端口上运行,并且它们只侦听127.0.0.1.
100 个并发请求对我来说似乎并不多,即使这是我的托管公司提供的绝对最低规格服务器。我如何着手调查服务器崩溃时发生的情况?
崩溃后服务器没有重新启动。没有消息写入我的kern.log,并且服务器前面没有防火墙。
您需要安装一些记录系统性能数据的程序,并在执行这些基准测试时运行它。Collectd 在这方面非常受欢迎,但需要预先进行大量学习。您可以安装“sysstat”来获取“sar”命令,但粒度只有10分钟,因此可能无法捕获所有问题。您还可以登录并运行“vmstat 5”之类的命令,它将每 5 秒打印出有关 IO/负载/内存的统计信息。
如果您将 Apache pre-fork(默认)与 PHP 结合使用,100 对于小型服务器来说已经很多了。因为这将需要 100 个并发进程来满足请求。如果您将 MaxClients 设置为低于 100,则请求将在队列中备份,并且速度非常慢。不过,这可能比整个系统崩溃更好。