Behavior of nginx on Allocation Failure

Maxim Dounin mdounin at mdounin.ru
Thu Jun 16 00:29:06 UTC 2022


Hello!

On Tue, Jun 14, 2022 at 09:11:32PM -0700, Colin wrote:

> I'm interested in how nginx performs when close to/at memory limits, but
> haven't been able to find answers to a couple of things. Mainly: Does nginx
> usually treat allocation failures as recoverable, or fatal? I know
> ngx_alloc fires an emergency-level error on failure, but I'm curious about
> how nginx usually behaves afterwards.
> 
> More generally, does nginx make any guarantees about behavior when
> allocations fail? I've looked at the memory management API but if I've
> missed any other documentation that answers these questions, feel free to
> just link me to it.

In nginx, allocation errors are properly handled according to the 
particular place where the error happens.  For example, if an 
error happens during nginx startup - it is not possible to do 
anything, so nginx will simply exit with an error.  If an error 
happens while handling a request, nginx will respond with error 
500 (Internal Server Error) if possible and close the connection.  
That is, as long as nginx is started, it is expected to work even 
if some memory allocations fail (though will drop some requests / 
connections).

Note though that proper handling might not apply to 3rd party 
libraries being used.  For example, Perl calls abort() on 
allocation failures, so one certainly shouldn't rely on nginx with 
embedded Perl being used in memory-constrained environments.

-- 
Maxim Dounin
http://mdounin.ru/



More information about the nginx mailing list