我已经使用nginx内置功能 clientbodyinfileonly 来上传我的文件。并且为了了解它的表现。我使用Apache ab来测试它。
当我将并发级别设置为 100 时,
ab -n 10000 -c 100 -p xxxx.rar -T application/x-www-form-urlencoded http://??????
结果是
Requests per second: 1477.95 [#/sec] (mean)
当并发级别设置为120时,我遇到502错误。
connect() to unix:/???/uwsgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream
如下所示的nginx配置[访问Nginx direct file upload without passing them through backend了解更多详情]
location /upload {
auth_request /upload/authenticate;
client_body_temp_path /tmp/;
client_body_in_file_only on;
client_body_buffer_size 16M;
client_max_body_size 80M;
uwsgi_pass_request_headers on;
uwsgi_param X-FILE $request_body_file;
uwsgi_pass_request_body off;
uwsgi_pass unix://tmp/uwsgi.sock;
include uwsgi_params;
}
location = /upload/authenticate {
uwsgi_pass unix://tmp/uwsgi.sock;
uwsgi_pass_request_body off;
uwsgi_param CONTENT-LENGTH "";
uwsgi_param X-Original-URI $request_uri;
include uwsgi_params;
}
我采用的方式是提供更多的后端服务器以及上游指令。现在502消失了。但是,无论我添加了多少uWSGi实例,TPS仍然小于1600 [实际上,我最多使用8个实例,每个实例有2个进程]。
我还在加载测试期间查看了cpu,内存使用情况[top,free,vmstat]。它们不是太高。
为什么即使我使用了更多的uWSGI实例,性能也不会变得更好?我怎么知道在哪里优化?
使用的机器是具有2个CPU(2.5GHz),4G内存的AWS EC2。用于上传的文件大小为30K。