![nginx 无法执行许多请求](https://linux22.com/image/654044/nginx%20%E6%97%A0%E6%B3%95%E6%89%A7%E8%A1%8C%E8%AE%B8%E5%A4%9A%E8%AF%B7%E6%B1%82.png)
我有一个关于 nginx tune 的问题。
我有一个应用程序,希望每秒执行 200 次。
我创建了 bash 文件并使用带有 bqO 开关的 wget 进行执行。
但它有一个问题。
当请求数大于100时,nginx不会响应另一个请求,而是停留在加载状态,直到一个请求完成。
但是我设置了 pm.max_children 并将 worker_connections 设置为 200。
您对解决这个问题有什么建议吗?或者是否有类似“MySQL Tuner”的调整器可以调整 nginx。
我的配置:php-fpm55.conf:
pm = 按需 pm.max_children = 1024 pm.start_servers = 20 pm.min_spare_servers = 20 pm.max_spare_servers = 35 pm.max_requests = 256 pm.process_idle_timeout = 20
净.核心.somaxconn = 4096
系统配置信息:
- net.ipv4.tcp_window_scaling = 1
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.tcp_rmem = 4096 87380 16777216
- net.ipv4.tcp_wmem = 4096 65536 16777216
- net.ipv4.ip_local_port_range = 1024 65000
nginx.conf:
- 工作进程 8;
- worker_rlimit_nofile 1024000;
事件 {
- 工人连接10240;
- 使用epoll;
- 多接受;
}
- 发送文件;
- 保持活动超时2;
- 类型_hash_max_size 2048;
- 服务器令牌关闭;
- 客户端最大主体大小1024米;
- 客户端主体缓冲区大小128k;
- 服务器名称哈希桶大小128;
- 服务器名称哈希最大大小10240;
- fastcgi_缓冲区 8 16k;
- fastcgi_buffer_大小为32k;
- fastcgi_连接超时300;
- fastcgi_发送超时300;
- fastcgi_读取超时300;
结果:ab -n 100 -c 10 myindex.php
Server Software: nginx
Server Port: 80
Document Length: 3 bytes
Concurrency Level: 10
Time taken for tests: 21.128 seconds
Complete requests: 100
Failed requests: 32
(Connect: 0, Receive: 0, Length: 32, Exceptions: 0)
Total transferred: 17500 bytes
HTML transferred: 515 bytes
Requests per second: 4.73 [#/sec] (mean)
Time per request: 2112.791 [ms] (mean)
Time per request: 211.279 [ms] (mean, across all concurrent requests)
Transfer rate: 0.81 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 19 1334 2747.0 144 15734
Waiting: 19 1334 2747.0 144 15733
Total: 19 1334 2746.9 144 15734
Percentage of the requests served within a certain time (ms)
50% 144
66% 549
75% 1281
80% 1700
90% 4095
95% 8790
98% 12579
99% 15734
100% 15734 (longest request)
答案1
您似乎痴迷于 nginx 调优,却不知道架构中哪个部分最慢。nginx 不太可能是第一个需要调优的对象。
将您的 fastcgi 目标放在一个上游块中,并将$upstream_addr
和附加$upstream_response_time
到您的日志格式中。如果尚不存在,请附加$request_time
到您的日志格式,然后比较两次。如果它们彼此接近,则您的应用程序就是罪魁祸首。如果不是,那么它要么是 nginx,要么是您的网络。
只有在获得这些信息后,它才可能与调整 nginx 有意义。
答案2
也许你感兴趣keepalive_requests? 默认值为 100,您可以将其更改为更高的值