Unicorn_rails ignores USR2 signal

Yeung, Jeffrey Jeffrey.Yeung at polycom.com
Fri Mar 9 22:39:38 UTC 2012


Thanks Eric.  New strace capture as follows:

 $ sudo strace -f -e '!futex' -p 14255
 Process 14255 attached with 12 threads - interrupt to quit
 [pid 14322] restart_syscall(<... resuming interrupted call ...> <unfinished ...>
 [pid 14271] restart_syscall(<... resuming interrupted call ...> <unfinished ...>
 [pid 14267] accept(12,  <unfinished ...>
 [pid 14264] restart_syscall(<... resuming interrupted call ...> <unfinished ...>
 [pid 14255] select(6, [5], NULL, NULL, {42, 86504} <unfinished ...>
 [pid 14322] <... restart_syscall resumed> ) = -1 ETIMEDOUT (Connection timed out)
 [pid 14271] <... restart_syscall resumed> ) = -1 ETIMEDOUT (Connection timed out)
 [pid 14264] <... restart_syscall resumed> ) = -1 ETIMEDOUT (Connection timed out)
 [pid 14262] --- SIGUSR2 (User defined signal 2) @ 0 (0) ---
 [pid 14262] rt_sigreturn(0x20)          = 202

The last two lines do not say much for the event.  :(


-----Original Message-----
From: Eric Wong [mailto:normalperson at yhbt.net] 
Sent: Friday, March 09, 2012 2:24 PM
To: unicorn list
Cc: Yeung, Jeffrey
Subject: Re: Unicorn_rails ignores USR2 signal

"Yeung, Jeffrey" <Jeffrey.Yeung at polycom.com> wrote:
>  $ ruby -v
>  ruby 1.9.1p376 (2009-12-07 revision 26041) [x86_64-linux]
> 
> The Rails gem version is 2.3.14.  Unicorn gem version 4.2.0.

> I have done my best to debug it using strace and the stderr logs.  The 
> unicorn_rails master process handles HUP, QUIT, and USR1 signals as 
> expected, no problems.  However, the USR2 signal is being completely 
> ignored.

> While monitoring the master with strace, there are no calls observed 
> when sending a kill -USR2.  Nothing is logged to STDERR when sending 
> this signal, either.

Really strange, especially since other signals seem to work...

Since you're on Ruby (>= 1.9.0 && < 1.9.3), are you stracing with -f?

If you're not already, try using: strace -f -e '!futex'

1.9.x versions use a dedicated timer thread to accept signals, so you won't see system signal handlers in the VM without "strace -f".
The "-e '!futex'" filters out the noise from the polling wakeup in
<1.9.3 versions of Ruby.

Can you try Ruby 1.9.3?  The signal handling got completely reworked (for the better) and you won't need "-e '!futex'"


More information about the mongrel-unicorn mailing list