I’ve noticed a strange issue. I’ve a configuration like:
…
upstream _backend {
server 10.0.0.1:80 down;
server 10.0.0.2:80 down;
server 127.0.0.1:80 backup;
}
…
the purpose is to disable all backends and switch to some kind of
maintenance mode.
Howerver, with this config, all workers have after the first requests a
very high cpu load and nginx is not properly answering requests anymore.
Whenn I kill the workers, they reappear with the high load.
On Tue, Jan 26, 2010 at 05:39:02PM +0100, Matthias R. wrote:
…
I such a setup not allowed?
Yes, with all servers marked as ‘down’ nginx is caught in infinite
loop in ngx_http_upstream_get_peer(). I’ll take a look how to fix
this properly.
On Tue, Jan 26, 2010 at 06:31:43PM +0100, Piotr S. wrote:
This is done on purpose. This patch is part of patch distributed
with ngx_supervisord which enables you to start/stop backend servers
on demand.
But I agree that it could be optimized for mainstream release with
something like peers->none;
Doing unneeded work on purpose scares me.
I belive correct fix would be to integrate relevant checks into
peer selection loop. This way extra work will be avoided on
normal path and it will be still possible to eventually have
upstreams dynamically configured.