号称百万并发,但是我用 ab 压测的时候,发现如果 nginx 从后端服务获取的文件大小很大的话, 响应的延迟就很高
1 、如果请求 nginx,后端就返回几个字节的信息,那么上万并发没啥问题
2 、如果请求 nginx,后端返回 100K 的信息,可能就只有 5000 并发,然后日志就有 upstream timed out 的错误,再继续增加并发的话,基本全是 upstream timed out 错误
3 、如果请求 nginx,后端返回 700K 的信息,可能就只有 500 并发,然后日志也有 upstream timed out 的错误
4 、如果 nginx 配置文件里添加了 proxy_cache 缓存的话,并发会高点,但是也只有个几千并发,而且查看日志即使缓存 HIT 命中了,响应延迟仍然很高,竟然有好几秒,无法理解,从缓存中获取数据也要这么长时间,而且并发越高,响应延迟就越高,upstream timed out 也会很多,这都没有去后端请求了,直接拿的 nginx 缓存都这么慢
以下是我 nginx 的部分配置文件:
worker_processes auto;
worker_rlimit_nofile 65536;
events {
worker_connections 45000;
accept_mutex off;
multi_accept on;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
resolver 8.8.8.8;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$proxy_host" "$upstream_addr" '
'"$upstream_response_time" "$request_time" "$upstream_cache_status"';
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 2048;
send_timeout 10s;
keepalive_timeout 65;
keepalive_requests 10000;
#gzip on;
proxy_cache_path /usr/local/openresty/nginx/cache levels=1:2 keys_zone=gcdn:10m max_size=100g inactive=10m use_temp_path=off;
upstream {
xxxxx
keepalive 1000;
}
server{
proxy_pass xxxxxx;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $upstream_host;
proxy_connect_timeout 5s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 4 1M;
proxy_busy_buffers_size 2M;
}
linux 系统内核的修改参考的这篇文章:
https://www.jb51.net/article/157985.htmnginx 的并发跟后端返回数据量的大小有关么,大家有做过这方面的测试么,如果后端返回的数据基本在几百 K 到 1M 的话,怎样提高 nginx 的并发
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/717398
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.