在 ubuntu 18.04 上使用最小的 fastcgi/nginx 配置,看起来 nginx 一次只处理一个 fastcgi 请求。
# nginx configuration
location ~ ^\.cgi$ {
# Fastcgi socket
fastcgi_pass unix:/var/run/fcgiwrap.socket;
# Fastcgi parameters, include the standard ones
include /etc/nginx/fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)
我通过使用如下所示的 cgi 脚本来演示这一点:
#!/bin/bash
echo "Content-Type: text";
echo;
echo;
sleep 5;
echo Hello world
Run Code Online (Sandbox Code Playgroud)
使用curl 从两个并排的命令提示符访问脚本,您将看到服务器按顺序处理请求。
如何确保 nginx 并行处理 fastcgi 请求?
小智 5
Nginx 是一个非阻塞服务器,即使fcgiwrap作为后端使用也是如此。所以nginx进程数应该不是问题的原因。fcgiwrap真正的解决方案是增加使用该选项的进程数量-c。如果fcgiwrap使用 启动-c2,即使只有一个 Nginx 工作进程,也可以并行运行 2 个 cgi 脚本。
为了让 Nginx 并行处理 fastcgi 请求,你需要几件事:
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\nworker_processes N; // N as integer or auto\n
其中N是进程数,auto进程数等于核心数;如果你有很多 IO,你可能想要超过这个数字(拥有与核心一样多的进程/线程并不能保证 CPU 会饱和)。
\n\n\n就NGINX而言,线程池正在执行交付服务的功能。它由一个任务队列和许多处理该队列的线程组成。当工作进程需要执行可能很长的操作时,它不会自行处理该操作,而是将任务放入 pool\xe2\x80\x99s 队列中,任何空闲线程都可以从该队列中获取并处理该任务。
\n
因此,您想要选择N大于最大并行请求数的值。因此,即使您有 4 个核心,您也可以选择 1000 个;对于IO来说,线程只会占用一些内存,而不占用太多CPU。
aio threads在\'http\'、\'server\'或\'location\'上下文中,它是以下形式的缩写:\n\n\nRun Code Online (Sandbox Code Playgroud)\n# in the \'main\' context\nthread_pool default threads=32 max_queue=65536;\n\n# in the \'http\', \'server\', or \'location\' context\naio threads=default;\n
您可能会发现,在处理缓慢的 IO 问题时,从 Linux 切换到 FreeBSD 可能是一种替代方案。请参阅参考博客以获得更深入的理解。
\n\nNGINX 中的线程池将性能提升 9 倍!(www.nginx.com/blog)
\n| 归档时间: |
|
| 查看次数: |
2356 次 |
| 最近记录: |