1.0.5 (2004-07-29)

  • Short description: In previous releases, managed programs thatcreated voluminous stdout/stderr output could run more slowlythan usual when invoked under supervisor, now they do not.

Long description: The supervisord manages child output bypolling pipes related to child process stderr/stdout. Pollingoperations are performed in the mainloop, which also performs a‘select’ on the filedescriptor(s) related to client/serveroperations. In prior releases, the select timeout was set to 2seconds. This release changes the timeout to 1/10th of a secondin order to keep up with client stdout/stderr output.

Gory description: On Linux, at least, there is a pipe buffersize fixed by the kernel of somewhere between 512 - 4096 bytes;when a child process writes enough data to fill the pipe buffer,it will block on further stdout/stderr output until supervisordcomes along and clears out the buffer by reading bytes from thepipe within the mainloop. We now clear these buffers much morequickly than we did before due to the increased frequency ofbuffer reads in the mainloop; the timeout value of 1/10th of asecond seems to be fast enough to clear out the buffers of childprocess pipes when managing programs on even a very fast systemwhile still enabling the supervisord process to be in a sleepingstate for most of the time.