Problems with 0.9.1 on not so recent Linux kernels.

Maxim Dounin mdounin at mdounin.ru
Wed Dec 1 20:58:56 MSK 2010


Hello!

On Wed, Dec 01, 2010 at 05:41:41PM +0000, António P. P. Almeida wrote:

> On 1 Dez 2010 17h36 WET, mdounin at mdounin.ru wrote:
> 
> Hello Maxim,
> 
> > Hello!
> >
> > On Wed, Dec 01, 2010 at 05:07:51PM +0000, António P. P. Almeida
> > wrote:
> >
> >> I'm wondering if I'm the only one having this experience.
> >>
> >> I created my own .deb of 0.9.1 and installed on my dev machines and
> >> on Linode. Everything is working perfectly.
> >>
> >> In both cases I'm running a fairly recent kernel >= 2.6.32.
> >>
> >> Then I tried in machines running a 2.6.26 and there I had problems.
> >> When trying to access a site, one of the worker processes grabs
> >> 100% CPU utilization and the error file gets filed with:
> >>
> >> accept() failed (38: Function not implemented)
> >>
> >> It grows until exhausting the available disk space.
> >>
> >> No pages are served whatsoever. I'm guessing that this is an issue
> >> with a syscall that is missing in those kernel versions, but
> >> present in the newer versions.
> >>
> >> I reverted back to 0.8.53 in both machines.
> >>
> >> Anyone else experienced this? Igor, Maxim or other nginx
> >> insiders. Does 0.9.1 makes use of a Linux syscall available only in
> >> recent kernels?
> >
> > 0.9.1 tries to use accept4() on Linux if it's available.  If you 
> > compiled nginx on host with accept4() but run resulting binary on 
> > an older kernel - it won't work.
> 
> I compiled in both machines running a 2.6.24. One is an amd64
> architecture, so I have to recompile there, since my dev machines are
> i386.
> 
> The other I compiled also. I rebuilt the package in each machine.
> 
> Only on Linode I installed the binary package without rebuilding.

Ah, it looks like Igor committed Simon's patch even without fixing 
availability test, and it basically checks only if one have recent 
enough glibc.  So if you have recent glibc but an old kernel - it 
won't work at all.

Just in case: workaround to recompile with explicitly disabled 
accept4() support, e.g. with something like:

./configure --with-cc-opt="-DNGX_HAVE_ACCEPT4=0"

Maxim Dounin



More information about the nginx mailing list