[OpenSER-Devel] XMLRPC issues

Dan Pascu dan at ag-projects.com
Wed Mar 12 11:57:34 CET 2008


Whenever I run a lot of xmlrpc requests, after a while the xmlrpc process 
becomes unresponsive. It is still there, it doesn't crash, the rest of 
openser works as expected, but the xmlrpc process simply doesn't answer 
any request anymore until restarted. The number of requests I have to 
issue to make this happen is variable. Sometimes is takes only 100 
requests, other times is need up to 20000, but the end result is always 
the same.

The xmlrpc request I ran is refreshWatchers(account, 'presence', 0) called 
repeatedly until it no longer receives a reply. The account is a 
subscriber that is present in the system. But I also tried pwd and ps and 
got the same result.

Below is the strace right before and while it got stuck. As it can be seen 
it got stuck in futex() which seems to indicate some sort of locking 
mechanism that has entered a deadlock. The futex is not called before 
that point in the whole strace output, and when it is called it locks.


--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG) = 4353
close(9)                                = 0
waitpid(-1, 0xbfdcca6c, WNOHANG)        = -1 ECHILD (No child processes)
sigreturn()                             = ? (mask now [])
getpeername(8, {sa_family=AF_INET, sin_port=htons(38926), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|
SIGCHLD, child_tidptr=0xb7c69bc8) = 4354
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
accept(6, {sa_family=AF_INET, sin_port=htons(38928), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 9
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG) = 4354
close(8)                                = 0
waitpid(-1, 0xbfdcca6c, WNOHANG)        = -1 ECHILD (No child processes)
sigreturn()                             = ? (mask now [])
getpeername(9, {sa_family=AF_INET, sin_port=htons(38928), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|
SIGCHLD, child_tidptr=0xb7c69bc8) = 4355
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
accept(6, {sa_family=AF_INET, sin_port=htons(38930), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 8
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG) = 4355
close(9)                                = 0
waitpid(-1, 0xbfdcca6c, WNOHANG)        = -1 ECHILD (No child processes)
sigreturn()                             = ? (mask now [])
getpeername(8, {sa_family=AF_INET, sin_port=htons(38930), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|
SIGCHLD, child_tidptr=0xb7c69bc8) = 4356
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
accept(6, {sa_family=AF_INET, sin_port=htons(38932), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 9
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG) = 4356
close(8)                                = 0
waitpid(-1, 0xbfdcca6c, WNOHANG)        = -1 ECHILD (No child processes)
sigreturn()                             = ? (mask now [])
getpeername(9, {sa_family=AF_INET, sin_port=htons(38932), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|
SIGCHLD, child_tidptr=0xb7c69bc8) = 4357
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
accept(6, {sa_family=AF_INET, sin_port=htons(38934), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 8
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG) = 4357
close(9)                                = 0
waitpid(-1, 0xbfdcca6c, WNOHANG)        = -1 ECHILD (No child processes)
sigreturn()                             = ? (mask now [])
getpeername(8, {sa_family=AF_INET, sin_port=htons(38934), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|
SIGCHLD, child_tidptr=0xb7c69bc8) = 4358
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
accept(6, {sa_family=AF_INET, sin_port=htons(38936), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 9
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG) = 4358
close(8)                                = 0
waitpid(-1, 0xbfdcca6c, WNOHANG)        = -1 ECHILD (No child processes)
sigreturn()                             = ? (mask now [])
getpeername(9, {sa_family=AF_INET, sin_port=htons(38936), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|
SIGCHLD, child_tidptr=0xb7c69bc8) = 4359
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
accept(6, {sa_family=AF_INET, sin_port=htons(38938), 
sin_addr=inet_addr("10.0.0.146")}, [16]) = 8
kill(4359, SIG_0)                       = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG) = 4359
close(9)                                = 0
futex(0xb7dc9140, FUTEX_WAIT, 2, NULL


-- 
Dan



More information about the Devel mailing list