From admin at bclug.ca Thu Jan 30 06:28:27 2025 From: admin at bclug.ca (Ron / BCLUG) Date: Thu, 30 Jan 2025 03:28:27 -0800 Subject: Service resource management: i.e. Mailman3 vs Mailman2 Message-ID: <5ee7e0a7-fbab-407a-9b6d-17f96dac3170@bclug.ca> I found a nifty trick for measuring the resource consumption of various services using systemd. This was while trying to gauge the differences between Mailman v2 and Mailman v3 resource management. I have ranted about how much more expensive MM3 is in resource consumption (basically, about ? of a 2GB RAM VPS is consumed). I wanted further details. What I found was, a setting (or several) that systemd provides: There are a couple methods for enabling the *Accounting= features: Edit /etc/systemd/system.conf and enabling: DefaultCPUAccounting=yes DefaultIOAccounting=yes DefaultIPAccounting=yes DefaultBlockIOAccounting=yes DefaultMemoryAccounting=yes DefaultTasksAccounting=yes If one wants it for a single service, also a couple methods: systemctl set-property mailman3 TasksAccounting=yes MemoryAccounting=yes systemctl daemon-reload Or add these lines (my preferred method, no systemctl daemon-reload needed): # systemctl edit mailman3 [Service] MemoryAccounting=yes TasksAccounting=yes Or: do it manually This makes it really easy to measure resources used by a service that has many processes running, i.e.: # systemctl status mailman ... Tasks: 9 (limit: 2256) Memory: 46.5M CGroup: /system.slice/mailman.service ??1054 /usr/bin/python2 /usr/lib/mailman/bin/mailmanctl ??1056 /usr/bin/python2 /var/lib/mailman/bin/qrunner ??1057 /usr/bin/python2 /var/lib/mailman/bin/qrunner ??1058 /usr/bin/python2 /var/lib/mailman/bin/qrunner ??1067 /usr/bin/python2 /var/lib/mailman/bin/qrunner ??1068 /usr/bin/python2 /var/lib/mailman/bin/qrunner ??1071 /usr/bin/python2 /var/lib/mailman/bin/qrunner ??1083 /usr/bin/python2 /var/lib/mailman/bin/qrunner ??1084 /usr/bin/python2 /var/lib/mailman/bin/qrunner And for comparison, mailman 3 (which has TWO service files): # systemctl status mailman3 ... Tasks: 17 Memory: 889.9M CGroup: /system.slice/mailman3.service ??4112698 /opt/mailman/venv/bin/python ??4112711 /opt/mailman/venv/bin/python ??4112712 /opt/mailman/venv/bin/python ??4112713 /opt/mailman/venv/bin/python ??4112714 /opt/mailman/venv/bin/python ??4112715 /opt/mailman/venv/bin/python ??4112717 /opt/mailman/venv/bin/python ??4112718 /opt/mailman/venv/bin/python ??4112719 /opt/mailman/venv/bin/python ??4112720 /opt/mailman/venv/bin/python ??4112721 /opt/mailman/venv/bin/python ??4112725 /opt/mailman/venv/bin/python ??4112726 /opt/mailman/venv/bin/python ??4112790 /opt/mailman/venv/bin/python ??4112791 /opt/mailman/venv/bin/python # systemctl status mailman3-web ... Tasks: 12 Memory: 182.4M CGroup: /system.slice/mailman3-web.service ??4112890 /opt/mailman/venv/bin/uwsgi ??4112904 /opt/mailman/venv/bin/uwsgi ??4112905 /opt/mailman/venv/bin/uwsgi ??4112906 /bin/sh ... ??4112908 /opt/mailman/venv/bin/python ??4112910 /opt/mailman/venv/bin/python ??4112912 /opt/mailman/venv/bin/python ??4112913 /opt/mailman/venv/bin/python ??4112914 /opt/mailman/venv/bin/python ??4112915 /opt/mailman/venv/bin/python It's now quite clear: mm2 uses 9 process and < 50 MB RAM, but MM3 uses 17+12=29 processes (and that's with the default NNTP bridge disabled), and 889.9+182.4=1072.3 MB RAM. That's a *lot* of Python processes! Also, both require Apache (or NGINX), and MM3 requires PostgreSQL. As it is, I can see a lot of small mailing list users abandoning MM3 over this issue (plus its complexity). For my list, that's about one Python interpreter loaded into RAM for each list subscriber!