I have been using Supervisord for process management for quite a while now but had no idea it could manage memory usage (among other things) until just recently.
There is a Python project called Superlance which essentially adds some extra functionality to supervisord for managing processes and memory. The docs are a little thin so I thought it would be a good idea to highlight some of the functionality for folks that just want a few examples of how it works or can be used in a useful way.
Obviously you will want to have supervisor installed and configured already. That can be done with pip or via apt-get. You will also need to make sure you have a proper [unix_http_server] section in your /etc/supervisor/supervisord.conf file.
To install Superlance (on Ubuntu 14.04).
sudo pip install superlance
This will download and install a handful of Python scripts that can then be plugged in to Supervisor. Check the link above if you are interested in the other plugins.
Then you will need to add a section to your supervisor config for memmon to manage memory usgae.
[eventlistener:memmon] command=memmon -p <program_name>=3GB events=TICK_60
The “-p <program_name>” corresponds to the program header in your supervisor configuration. There are other options available to manage group processes, etc. for more advanced use cases but this should cover most basic scenarios.
You will need to reload the supervisor configuration after your changes have been made. Unforunately the supervisor process needs to be fully reloaded.
sudo supervisorctl reload
If you want to check that the the memmon script is available before restarting supervisor you can use reread.
sudo supervisorctl reread
I would suggest reading through the Superlance docs and checking out the other scripts. This additional functionality really helps add another layer of functionality to supervisord that I didn’t know existed.