如何使nginx同时处理fastcgi请求?
在Ubuntu18.04上使用最小的fastcgi/nginx配置,看起来nginx一次只处理一个fastcgi请求如何使nginx同时处理fastcgi请求?,nginx,fastcgi,Nginx,Fastcgi,在Ubuntu18.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/f
# 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请求?您可以查看在服务器上配置
worker\u processs
指令,这将允许更多进程同时处理请求。在中,建议将此设置为计算机拥有的CPU内核数,因此如果您有一个四核处理器,可以将其设置为4
,我想对于带有SMT的四核处理器(有时称为超线程),将此设置为8
,也可以正常工作。您还可以将其设置为auto
,并让NGINX为您处理
默认情况下,此值设置为1
,因此,如果未指定指令,则可以对其进行改进。您需要在nginx.conf
的顶部执行此操作,而不是在服务器{
块中
我敢说,在上,您将看到一些关于如何进一步提高性能的指南。您可以查看在服务器上配置
worker\u进程
指令,这将允许更多进程同时处理请求。建议在中将其设置为计算机拥有的CPU核数,因此如果如果有一个四核处理器,您可以将其设置为4
,我猜对于使用SMT(有时称为超线程)的四核处理器,将其设置为8
也会很好。您还可以将其设置为auto
,并让NGINX为您处理
默认情况下,此值设置为1
,因此,如果未指定该指令,这是可以改进的。您需要在nginx.conf
的顶部执行此操作,而不是在服务器{
块中
我敢说,在上,您将看到一些关于如何进一步提高性能的指南。为了让Nginx并行处理fastcgi请求,您需要以下几点:
N
是进程数,auto
进程数将等于内核数;如果您有许多IO,您可能希望超出此数(拥有与内核一样多的进程/线程并不保证CPU将饱和)
就NGINX而言,线程池正在执行传递服务的功能。它由一个任务队列和处理该队列的多个线程组成。当工作进程需要执行一个可能很长的操作时,它会将一个任务放在池的队列中,而不是单独处理该操作,并从中获取和处理该任务被任何自由的线所束缚
因此,您希望选择大于最大并行请求数的N
。因此,您可以选择1000,即使您有4个内核;对于IO,线程将只占用一些内存,而不占用太多CPU
'http'
、'server'
或'location'
上下文中使用aio线程,它是以下内容的缩写:
为了让Nginx并行处理fastcgi请求,您需要做以下几件事:
N
是进程数,auto
进程数将等于内核数;如果您有许多IO,您可能希望超出此数(拥有与内核一样多的进程/线程并不保证CPU将饱和)
就NGINX而言,线程池正在执行传递服务的功能。它由一个任务队列和处理该队列的多个线程组成。当工作进程需要执行一个可能很长的操作时,它会将一个任务放在池的队列中,而不是单独处理该操作,并从中获取和处理该任务被任何自由的线所束缚
因此,您希望选择大于最大并行请求数的N
。因此,您可以选择1000,即使您有4个内核;对于IO,线程将只占用一些内存,而不占用太多CPU
'http'
、'server'
或'location'
上下文中使用aio线程,它是以下内容的缩写:
Nginx是一个非阻塞服务器,即使在使用
fcgiwrap
作为后端时也是如此。因此,Nginx进程的数量不应该是问题的原因。真正的解决方案是使用-c
选项增加fcgiwrap
进程的数量。
如果使用
-c2
启动fcgiwrap
,即使使用一个Nginx工作进程,也可以并行运行两个cgi脚本。Nginx是一个非阻塞服务器,即使使用fcgiwrap
作为后端。因此,Nginx进程的数量不应该是问题的原因。真正的解决方案是增加数量使用-c
选项执行的fcgiwrap
进程。
如果使用-c2
启动fcgiwrap
,即使使用一个Nginx工作进程,也可以并行运行2个cgi脚本
worker_processes N; // N as integer or auto
# in the 'main' context
thread_pool default threads=32 max_queue=65536;
# in the 'http', 'server', or 'location' context
aio threads=default;