KQueue: 2 or more IPv6 listen ports + HUPing causes repeated log spam

Igor Sysoev igor at sysoev.ru
Wed Jul 7 19:11:57 MSD 2010


On Wed, Jul 07, 2010 at 11:06:35AM -0400, WolfSage wrote:

> With 2 or more IPv6 listen ports enabled in nginx, if you send it about
> 3-4 HUPs, it will start to log spam repeatedly in
> /var/log/nginx-error.log until the partition fills up with the following
> error message:
> [quote][alert] 4104#0: kevent() failed (9: Bad file descriptor)[/quote]
> 
> I've tested this on FreeBSD 6.2, both 32-bit single-core and 64-bit
> multi-core, as well as FreeBSD 7.1 64-bit multi-core.
> 
> To repeat:
> 
> Start up nginx with the following config file:
> [quote]
> worker_processes  1;
> 
> events {
>     worker_connections  1024;
> }
> 
> http {
>     server {
>         listen       [::]:8001;
>         listen       [::]:8002;
>     }
> }
> [/quote]
> 
> Send it a single HUP. Nothing should be reported in
> /var/log/nginx-error.log
> 
> Send it another HUP, the following should appear in the log:
> [quote]
> [alert] 4088#0: kevent() error on 6 filter:-1 flags:4000 (9: Bad file
> descriptor)
> [emerg] 4085#0: close() socket [::]:8002 failed (9: Bad file
> descriptor)
> [alert] 4088#0: kevent() error on 6 filter:-1 flags:4000 (9: Bad file
> descriptor)
> [/quote]
> 
> Now send it 1-2 more hups, (maybe a few more might be necessary), and
> the following will appear:
> [quote]
> [alert] 4081#0: sendmsg() failed (9: Bad file descriptor)
> [alert] 4104#0: kevent() failed (9: Bad file descriptor)
> [alert] 4104#0: kevent() failed (9: Bad file descriptor)
> [alert] 4104#0: kevent() failed (9: Bad file descriptor)
> [emerg] 4101#0: close() socket [::]:8002 failed (9: Bad file
> descriptor)
> [alert] 4104#0: kevent() failed (9: Bad file descriptor)
> [alert] 4081#0: close() channel failed (9: Bad file descriptor)
> [alert] 4104#0: kevent() failed (9: Bad file descriptor)
> [alert] 4081#0: sendmsg() failed (9: Bad file descriptor)
> [/quote]
> 
> And then the line from above will be repeated endlessly:
> [quote]
> [alert] 4104#0: kevent() failed (9: Bad file descriptor)
> [alert] 4104#0: kevent() failed (9: Bad file descriptor)
> [alert] 4104#0: kevent() failed (9: Bad file descriptor)
> ...
> [/quote]
> 
> I've found that if you only have 1 IPv6 listen port, this doesn't
> happen. I also haven't been able to reproduce it with IPv4 listen
> ports.
> 
> -- WolfSage (Matthew Horsfall)

Try nginx-0.8.43+


-- 
Igor Sysoev
http://sysoev.ru/en/



More information about the nginx mailing list