我正在使用Laravel(中等静态网络)在nginx中运行服务器,我在1分钟内做500 constant load并发用户(在那一分钟内不是分布式用户)。
并收到此错误:
unix:/var/run/php/php7.1-fpm.sock失败 - 资源暂时不可用
cginx.conf
worker_processes auto;
events {
use epoll;
worker_connections 1524; #in my case it should be 1024, but well..
multi_accept on;
}
http {
#with this I reduce disk usage a lot
client_body_buffer_size 10K;
client_header_buffer_size 1k;
large_client_header_buffers 2 1k;
reset_timedout_connection on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
www.conf
pm.max_children = 500
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 64
使用Google计算引擎的结果:
f1-micro (1 vCPU, 0,6 GB) - Is supporting 40 - 60 requests per second
g1-small (1 vCPU, 1,7 GB) - Is maintaining 80 request per second
n1-standard (1vCPU, 3,75 GB) - - Is maintaining 130 request per second
n1-standard-2 (2vCPU, 7,5 GB) - Is maintaining 250 request per second
.
.
n1-standard-16 (16 vCPU, 60 GB) - Is maintaining 840 request per second
最后一个是第一个通过测试,其余的是将Bad Gateways错误从200个用户丢失到400个
例如,如果我测试的是没有使用微实例在30秒内分发的2.000个用户那么很好,但不能同时发送请求。
从2个核心开始,CPU级别显示完全正常,与磁盘操作等相同。
所以经过一系列的测试我有一些问题:
1)这是正常的吗?不适合我,需要16个内核来运行一个简单的网络是不正常的..或者压力测试太重而且这是正常的?
2)然后,我错过了什么? Google会以某种方式每秒限制请求吗?
3)给定配置文件的正常参数是什么?
任何其他帮助都非常受欢迎
TBH,目前还不完全清楚你试图通过这个测试实现什么,特别是将GCE纳入等式。
如果您的“中等静态网站”网站正在为每个页面执行十几个SQL查询,可能每个页面都有几个JOIN
s,以及各种其他资源密集型操作,那么您距离实现C10K的距离就不足为奇了。
您在各种GCE实例中的测试结果看起来相当一致,证明您的代码是值得责备的。如果您想排除GCE是导致性能问题的原因,那么下一个合乎逻辑的步骤似乎是测试其外部的性能。
看起来你最关心的是在更便宜的实例上接收Bad Gateway
错误,所以,让我们弄清楚为什么会发生这种情况。
那么,解决方案是什么?
解决方案是清楚地了解在后端生成每个页面需要多少资源,然后限制从反向代理到后端的同时连接数量,从不超过这样一定数量的连接,使用http://nginx.org/r/limit_req和/或http://nginx.org/r/limit_conn,视情况而定。这样,您可以捕获并监视过载情况,并向用户提供相应的错误消息,和/或脚本自动动态调整基础结构的大小。
除了上述内容之外,另一个好主意是缓存后端的结果,前提是它实际上是生成的“静态”内容,没有按用户自定义,这可以让您考虑到链接到您的链接时的实际情况网站发布在Slashdot / Reddit / Twitter上,导致单个“静态”页面的流量大幅增加,然后可以在整个事件期间缓存。否则,如果内容实际上并不是“静态的”,那么由您来决定采用哪种方式以及采取哪种妥协方式 - 我建议查看每个请求的自定义是否真的有必要,以及是否有未定制的版本可能适当,特别是对于像Slashdot一样的场景。
在一台2vcpu和7gb ram的机器上我可以处理更多的1000请求/秒您没有提到每个请求你需要的ram,我也建议将php socket更改为tcp连接,它允许我处理10x请求