If I run passenger against ruby-enterprise-1.8.6-20080810, most child
processes eventually end up in this infinite loop:
#0 0x080b7499 in st_delete (table=0xa4a8ff0, key=0xbf9ed288,
value=0xbf9ed2a4) at st.c:422
#1 0x0806fb64 in run_final (obj=143240380) at gc.c:2068
#2 0x0806fc10 in finalize_list (p=0x889acbc) at gc.c:1192
#3 0x0806ff4e in rb_gc_finalize_deferred () at gc.c:2087
#4 0x0805e4aa in rb_call0 (klass=143240420, recv=167219220, id=1,
oid=1, argc=<value optimized out>, argv=0x0, body=0x889ac80, flags=2)
at eval.c:5821
#5 0x0805f1a1 in rb_call (klass=143240420, recv=167219220, mid=1,
argc=0, argv=0x0, scope=1, self=6) at eval.c:6117
#6 0x0805f6d0 in vafuncall (recv=167219220, mid=1, n=0,
ar=0xbf9ed504) at eval.c:6194
#7 0x0805f7f0 in rb_funcall (recv=167219220, mid=1, n=0) at eval.c:
6211
#8 0x08086589 in rb_obj_alloc (klass=167219220) at object.c:1534
#9 0x0807f65e in r_object0 (arg=0xbf9ed760, proc=0, ivp=0x0,
extmod=4) at marshal.c:1293
#10 0x0807fcb7 in r_object (arg=0x0) at marshal.c:1380
#11 0x0807f429 in r_object0 (arg=0xbf9ed760, proc=0, ivp=0x0,
extmod=4) at marshal.c:1189
#12 0x0807fcb7 in r_object (arg=0x0) at marshal.c:1380
#13 0x08054af9 in rb_ensure (b_proc=0x807fcc0 <load>,
data1=3214858080, e_proc=0x807ebe0 <load_ensure>, data2=3214858080) at
eval.c:5519
#14 0x0807ea46 in marshal_load (argc=1, argv=0xbf9ed9d0) at marshal.c:
1457
#15 0x08055cd6 in call_cfunc (func=0x807e900 <marshal_load>,
recv=143171520, len=253469620, argc=0, argv=0xbf9ed9d0) at eval.c:5715
#16 0x0805e5cd in rb_call0 (klass=143171460, recv=143171520, id=9737,
oid=9737, argc=0, argv=0xbf9ed9d0, body=0x8889f20, flags=0)
at eval.c:5870
#17 0x0805f1a1 in rb_call (klass=143171460, recv=143171520, mid=9737,
argc=1, argv=0xbf9ed9d0, scope=0, self=248411300) at eval.c:6117
#18 0x0805cbf4 in rb_eval (self=248411300, n=<value optimized out>) at
eval.c:3490
#19 0x0805eda0 in rb_call0 (klass=187680960, recv=248411300,
id=176209, oid=176209, argc=0, argv=0xbf9eddf0, body=0xb30973c,
flags=2)
at eval.c:6021
#20 0x0805f1a1 in rb_call (klass=187680960, recv=248411300,
mid=176209, argc=1, argv=0xbf9eddf0, scope=1, self=248411300) at
eval.c:6117
#21 0x0805ccfb in rb_eval (self=<value optimized out>, n=<value
optimized out>) at eval.c:3505
#22 0x0805b58f in rb_eval (self=248411300, n=<value optimized out>) at
eval.c:3675
#23 0x0805d5fb in rb_eval (self=248411300, n=<value optimized out>) at
eval.c:3306
#24 0x0805eda0 in rb_call0 (klass=187680960, recv=248411300,
id=129729, oid=129729, argc=0, argv=0x0, body=0xb30b190, flags=2)
at eval.c:6021
#25 0x0805f1a1 in rb_call (klass=187680960, recv=248411300,
mid=129729, argc=0, argv=0x0, scope=2, self=248411300) at eval.c:6117
#26 0x0805c94a in rb_eval (self=<value optimized out>, n=<value
optimized out>) at eval.c:3511
#27 0x0805eda0 in rb_call0 (klass=187988940, recv=248411300,
id=175097, oid=175097, argc=4, argv=0x0, body=0xb36e704, flags=0)
at eval.c:6021
#28 0x0805f1a1 in rb_call (klass=187988940, recv=248411300,
mid=175097, argc=0, argv=0x0, scope=0, self=248411480) at eval.c:6117
#29 0x0805cbf4 in rb_eval (self=248411480, n=<value optimized out>) at
eval.c:3490
#30 0x0805cb1f in rb_eval (self=248411480, n=<value optimized out>) at
eval.c:3484
#31 0x0805ded3 in rb_eval (self=248411480, n=<value optimized out>) at
eval.c:3220
....
This does not happen if I run passenger with ruby 1.8.6 patch level
287. I don't know if it's an interaction with Marshal load in the
fiveruns memcache client:
http://github.com/fiveruns/memcache-client/tree/master
or something else. One server is doing 50-100 memcache multi-gets a
second, so we're stressing this piece of code quite a bit. I've seen
some memory leaks here running bleak_house, which also makes me
suspicious. Any suggestions on how to do some more debugging? I saw a
previous post in this group about a similar issue, but I don't know if
there was ever a resolution.