SIGRT_0 signal caught by ZServer/medusa?

skip@p... skip@p...
Sun, 6 May 2001 13:20:02 -0500

I'm using ZServer from the Zope 2.2.0 distribution as a backend to Apache on
a Linux machine. The architecture (if you can call it that anymore) of the
system is this:

apache <--http proxy--> zserver <--xmlrpc--> database server

Actually, behind the database server sits the real database - MySQL, but I
don't think it's germane to this discussion.

Performance of this system is sometimes abysmal at times when I can't
account for it by some cause like system load. I monitor things from
time-to-time using tools like strace. Once started, there are typically
four process ids associated with zserver, presumably four different
threads. I can watch the thread that's doing all the socket activity:

select(19, [9 14 18], [], [], {10, 0}) = 1 (in [14], left {9, 970000})
read(14, "x", 8192) = 1
select(19, [9 14 18], [18], [], {10, 0}) = 1 (out [18], left {10, 0})
send(18, "HTTP/1.0 200 OK\r\nServer: Zope/Zo"..., 7087, 0) = 7087

Every so often, strace quits with something like this:

kill(11754, SIGRT_0) = 0
select(15, [9 10 14], [], [], {10, 0}) = 1 (in [9], left {1, 530000})
rt_sigprocmask(SIG_SETMASK, NULL, [RT_0], 8) = 0
rt_sigsuspend([] <unfinished ...>
--- SIGRT_0 (Real-time signal 0) ---

The strace'd process doesn't actually croak, however. Frequently, the kill
call is executed without terminating strace. If I strace the database
server (also written in Python, but not using medusa), I never see the kill
calls or the strace termination, so my naive assumption is that somehow the
behavior I see in ZServer is somehow Zope- or Medusa-related.

Any idea what this mysterious SIGRT_0 signal is (I can see it's a "real-time
signal", but that doesn't tell me much) and why it would be getting sent to
my ZServer? I can't find mention of it in the man pages.


Skip Montanaro (skip@p...)