我正在使用nginx,需要测试是否所有工作程序都正确共享数据,但是目前只有一个工作程序正在处理所有请求。
我的worker_process
设置为4,但是仍然有一个工作人员正在处理所有请求。
我可以通过将worker_connections
的数量更改为非常低的值并在while循环中使用curl命令将垃圾邮件nginx强制为包括其他工作程序。也许max_conns
可以工作,但是我正在使用nginx的免费版本。
是否有更实际的方法来迫使nginx使用不同的工作程序?
我当前的设置是这个。任何帮助,将不胜感激。
worker_processes 4;
events {
worker_connections 5;
multi_accept off;
use epoll;
}
server {
listen 8081;
server_name *.localhost;
# max_conns = 3;
set $upstreamserver "127.0.0.7:8080
location =/worker {
content_by_lua '
ngx.say(ngx.worker.id())
ngx.say(ngx.var.pid)
ngx.say(ngx.worker.count())
';
}
location /basic_status {
stub_status;
}
location / {
proxy_buffering off;
proxy_redirect off;
proxy_pass http://upstreamserver;
}
答案 0 :(得分:1)
您似乎遇到了epoll的限制,而不是nginx或Lua。 This article详细解释了正在发生的事情。
如果您确实希望在各个工作人员之间更均匀地分配负载,则以上文章建议在reuseport
指令(docs)上使用listen
选项。
server {
listen 8081 reuseport;
...
}
尽管在某些极端情况下延迟可能会增加,但这并不是所有情况下的最佳选择。