有什么办法可以防止nginx同时重新加载所有worker的configuration吗? 我已经configuration了一些非常短暂的超时,因此当负载较高时,加倍的工作进程会导致504个错误的增加。 我想通过一个接一个地交换工人(或者三到三个)来防止这种情况发生,但我找不到任何方法来实现这一目标。
编辑:
在configuration期间重新加载nginx使工作进程数量翻倍:
我正在开发的CDN在计算caching键时发出请求。 这些请求真的很短暂(如果我没有记错的话,50ms),所以他们对服务器负载的变化非常敏感。 当configuration重新加载频繁时,这些请求超时。 我认为这是由额外的工作进程引起的,所以我想知道是否有可能在同一时间只对less数工作人员重新加载configuration。 它可以这样工作:
我没有find任何使这种行为的选项,所以我认为这是不可能的。 但我想确定一下。
我想你误解了nginx的devise。
这个Web服务器并不像Apache那样遵循每个连接一个进程的经典scheme。
因此,添加更多的工作人员几乎没有用处比CPU核心的数量,一些工作进程等于这个机器属性是最有效的configuration。
换句话说:在Apache时代,你必须增加更多的工人来处理更多的stream量,因为1个进程<=> 1个连接。
现在,这个nginx,只有关系1连接=> 1进程保留,但1进程=> 1连接不再是真实的。 nginx的事件驱动devise允许每个worker都接受许多连接,而不是等待(保持空闲状态),直到完全忙(使用core-s上的CPU为100%)为止。
基准是:如果configuration正确,则不需要更改nginx实例的工作者数量(参见worker_processes , auto通常就足够了)。 如果工人们都饱和了,那么你将有一个机器属性成为瓶颈(CPU,I / O),因此增加新的工人不会做太多的工作,但会增加问题。
现在,对于想要“一个一个交换工作人员”的部分,nginx的主人为工作人员分配套接字,所以你不知道你正在影响哪个请求/客户端。
想想如果在一起产生(和死亡)的一组。 通过使用nginx 的即时升级function,您可以同时在多个主设备上加载多个二进制版本和/或多个configuration。 然后,您可以通过信号与主设备进行通信,从而无缝切换不同的configuration。
我强烈build议你阅读nginx的devise,以便清楚地知道你正在处理的是什么,以及你为什么要求保持稳定。
你没有指定你真正的意图是什么,所以我坚持提供你所问的确切问题。 如果你告诉社区你想达到什么,那么可能有一组简单的问题/答案。