We have apache running over https with a module that provides a proxy to (interalia) websockets and tcp sessions. Source is at:
https://github.com/abligh/apache-websocket (if anyone is interested.)
Following a relatively recent upgrade to apache (sadly I don't know which, but somewhere between Lucid and Precise), we ended up with some worker processes that hang with 100% CPU usage. Investigation with gdb shows this appears to be the destruction of the output bucket brigade going around and around without ever terminating. No data is flowing (obviously). These hung processes will persist for days.
No doubt there is a bug either in our module or apache that causes this, but I'm more interested in how apache kills runaway workers, or more accurately why it's not killing them here.
We are using:
RequestReadTimeout body=300,minrate=1
This should require a minimum data rate of 1 byte per second. Is RequestReadTimeout only checked if the process actually is in/exiting select()? If so, how do I do a watchdog?
Or is the issue that minrate 1 with a previous sensible datarate generates an enormous timeout value that might be in days? If so is the right approach:
RequestReadTimeout body=300-3600,minrate=1
or similar?
We're now using:
apache2-mpm-prefork 2.2.22-1ubuntu1.2
Server version: Apache/2.2.22 (Ubuntu)
Server built: Nov 8 2012 21:37:30