I believe this is a problem in the storm.py multilang prototype adapter bundled with Storm. We fixed this issue in a more full fledged multilang adapter that is available here:
https://github.com/Parsely/streamparse You could try pip install streamparse and change your bolt to subclass streamparse.bolt.Bolt instead and see if the problem goes away. Full API docs here: http://streamparse.readthedocs.org/en/latest/api.html On Jun 11, 2014 3:27 PM, "Scot Kronenfeld" <[email protected]> wrote: > I am using Storm w/ my bolts and spouts written in Python. > > When I am running in a test environment locally I have a problem where if > the spout dies, the bolts consume 100% CPU and gradually increase their > memory. Here are the details: > > My spout is reading from mongo. Sometimes it loses its cursor (due to a > network hiccup or something) and it raises an exception and bails out. I > can also reliably reproduce this problem by using "kill -9 <spout PID>". > > Using strace and then a debugger, I figured out that the bolts are stuck > in this tight loop in the readMsg function inside storm.py (which ships > with storm) > > while True: > line = sys.stdin.readline()[:-1] > if line == "end": > break > msg = msg + line + "\n" > > The readline() call is a blocking call, but the bolt keeps getting blank > lines as input. > > Note: the memory problem is because newlines keep getting appended. Since > the input is used as JSON, it would probably be safe to just remove the > addition of the newline (I'm not 100% positive because that might not work > if there are newlines in an embedded string within the JSON). But that > still doesn't fix the core issue. > > I think the problem is that if the spout does not come down cleanly, > something in the Java keeps sending input to the bolts. I'm about to dig > into the Java code but I don't know any Java so I figured it was worth a > quick message to the Storm list to see if this is a known problem. Or even > if anyone has a pointer for where to look in the Java. I haven't > previously looked at the Storm source - it's just been a black box to this > point for me. > > Thanks, > scot >
