From: Alexander S. <sou...@gm...> - 2006-07-31 19:55:19
Attachments:
threadframe.patch
|
Hello, We are having a problem that appears to be caused by a cheeky thread preventing other threads from running, holding up all other requests to the application. Without the ability to see the state of each thread we're just playing guessing games trying to figure out the guilty party. After a bit of searching we came across Fazal Majid's useful extension, threadframe (http://www.majid.info/mylos/stories/2004/06/10/threadframe.html) which exports thread stack frames as a dict. If you've used Java much you know that sending SIGQUIT to a Java process will dump all thread stack frames to stderr. We wanted to mimic this behavior in Python and so patched the ThreadedAppServer class to catch SIGQUIT, dump threads to stdout, and continue on its merry way. Attached is the patch to Webware 0.9.1's ThreadedAppServer. Obviously it requires the alpha/beta (but seemingly stable) threadframe package, so caveat emptor, etc. etc. Enjoy Alex Southgate |
From: Alexander S. <sou...@gm...> - 2006-07-31 20:33:58
Attachments:
threadframe.patch
|
Hello, We are having a problem that appears to be caused by a cheeky thread preventing other threads from running, holding up all other requests to the application. Without the ability to see the state of each thread we're just playing guessing games trying to figure out the guilty party. After a bit of searching we came across Fazal Majid's useful extension, threadframe (http://www.majid.info/mylos/stories/2004/06/10/threadframe.html) which exports thread stack frames as a dict. If you've used Java much you know that sending SIGQUIT to a Java process will dump all thread stack frames to stderr. We wanted to mimic this behavior in Python and so patched the ThreadedAppServer class to catch SIGQUIT, dump threads to stdout, and continue on its merry way. Attached is the patch to Webware 0.9.1's ThreadedAppServer. Obviously it requires the alpha/beta (but seemingly stable) threadframe package, so caveat emptor, etc. etc. Enjoy Alex Southgate |
From: Christoph Z. <ci...@on...> - 2006-08-10 23:26:43
|
Alexander Southgate wrote: > After a bit of searching we came across Fazal Majid's useful > extension, threadframe > (http://www.majid.info/mylos/stories/2004/06/10/threadframe.html) > which exports thread stack frames as a dict. > > If you've used Java much you know that sending SIGQUIT to a Java > process will dump all thread stack frames to stderr. We wanted to > mimic this behavior in Python and so patched the ThreadedAppServer > class to catch SIGQUIT, dump threads to stdout, and continue on its > merry way. > > Attached is the patch to Webware 0.9.1's ThreadedAppServer. Obviously > it requires the alpha/beta (but seemingly stable) threadframe package, > so caveat emptor, etc. etc. I think that is very useful and I have applied your patch to the current trunk. One thing I changed is that the signal handler is only installed if the threadframe module is installed (otherwise, you'll get the default behavior). I also made this work on Windows by using SIGBREAK here. So on Windows, you can shutdown/restart with Ctrl-C and you can now get a thread dump with Ctrl-Break. However, I have one problem under Windows: Hitting Ctrl-Break does only work one time. For some reason, Windows ignores subsequent Ctrl-Breaks. Does anybody have an explanation for that behavior? -- Christoph |
From: Christoph Z. <ci...@on...> - 2006-08-11 01:10:37
|
> However, I have one problem under Windows: Hitting Ctrl-Break does only > work one time. For some reason, Windows ignores subsequent Ctrl-Breaks. After some debugging I finally found it. It had to do with the fact that under Windows the mainloop runs in a separate thread, and the AppServer waited for the end of that thread whenever there was any interrupt, assuming it must always be a shutdown. However, the IOError interrupt raised by Ctrl-Break does not trigger a shutdown. I fixed it so that the AppServer continues if there is an interrupt without shutdown. The thread dumping works very nicely now under Windows. -- Christoph |