在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;
}
我通过使用如下cgi脚本来演示这一点:
#!/bin/bash
echo "Content-Type: text";
echo;
echo;
sleep 5;
echo Hello world
使用curl从两个并排的命令提示符访问脚本,您将看到服务器按顺序处理请求。
如何确保nginx并行处理fastcgi请求?
为了让Nginx并行处理fastcgi请求,您需要做一些事情:
worker_processes N; // N as integer or auto
N
进程auto
数在哪里,进程数将等于核心数;如果您有许多IO,则可能希望超出此数目(拥有与内核一样多的进程/线程并不能保证CPU会饱和)。
就NGINX而言,线程池正在执行交付服务的功能。它由一个任务队列和一些处理该队列的线程组成。当工作进程需要执行可能很长的操作时,而不是单独处理该操作,而是将一个任务放入池的队列中,任何空闲线程都可以从中提取和处理该任务。
因此,您要选择N
大于并行请求的最大数量。因此,即使您拥有4个内核,您也可以选择1000。对于IO,线程仅占用一些内存,而不会占用太多CPU。
aio threads
在'http'
,'server'
或'location'
上下文,它是一个短为:# in the 'main' context thread_pool default threads=32 max_queue=65536; # in the 'http', 'server', or 'location' context aio threads=default;
您可能会看到,在处理缓慢的IO时,可以从Linux切换到FreeBSD。请参阅参考博客以获得更深入的了解。