NGINX:强制nginx使用所有工作进程进行负载均衡

我正在使用nginx并且我需要测试所有工作进程是否正确共享数据,但目前只有一个工作进程处理所有请求。

我的worker_process设置为4,但仍然有一个工作进程服务所有请求。

我可以通过将worker_connections的数量更改为非常低的值并使用循环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;
    }

点赞
用户2328533
用户2328533

似乎您遇到了 epoll 的限制,而不是 nginx 或 Lua 的限制。这篇文章详细解释了发生了什么。

如果您真的想要在 worker 之间更均匀地分配负载,上述文章建议在 listen 指令上使用 reuseport 选项(文档)。

server {
     listen       8081 reuseport;
     ...
}

然而,在某些极端情况下,这并不是最好的选择,因为延迟可能会增加。

2019-08-14 18:17:49