nginx stuck in tight loop sometimes ( sorry for new thread )
Maxim Dounin
mdounin at mdounin.ru
Tue Jan 19 15:10:11 UTC 2021
Hello!
On Tue, Jan 19, 2021 at 01:33:54PM +0000, James Beal wrote:
> > Are you able to reproduce the problem without any 3rd party
> > modules? Since nginx itself does not use pipes, this looks
> > like a pagespeed problem.
>
> Not really we use about 500mb/s of bandwidth with pagespeed
> turned on and we are using about 2 gigabits a second with it
> turned off ( although I think that is more hitting the limits of
> the interconnect ).
Well, so you'll have to debug what happens then. Debugger and
strace are your friends. Most likely you'll end up fixing
pagespeed (or working on removing it from your system). Some
useful links from a quick look into pagespeed code below.
> A two minute look at the nginx source shows pipes around
> upstream I think.
These aren't OS pipes, but rather nginx code named
"ngx_event_pipe".
> Is there a method of working out where an nginx process is stuck
> ( It does not respond to the normal signals ).
As long as the process is stuck in a 3rd party module code,
spinning in a loop, the only thing you can do is to send the KILL
signal to the process, which cannot be catched or ignored and
kills the process. Or you can attach to the process with a
debugger and take a look where it spins. I suspect this will be
this code, which simply re-tries writing on EAGAIN:
https://github.com/apache/incubator-pagespeed-ngx/blob/master/src/ngx_event_connection.cc#L151
The "TODO(oschaaf): should we worry about spinning here?" line in
the code looks like exactly what you are seeing. The relevant
issue is linked in the same file:
https://github.com/apache/incubator-pagespeed-ngx/issues/1380
That is, the code is known to do not work under load for at least
three years. This basically matches my impression from previous
attempts to look into the pagespeed code: it is not expected to
work. I would really recommend to reconsider its usage. If you
need optimizations of the responses returned, consider doing this
during your deployment.
Hope this helps.
--
Maxim Dounin
http://mdounin.ru/
More information about the nginx
mailing list