systemd & resource monitoring

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 enable:
  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!

By admin

Linux admin, JS / React / Python / Perl developer.

Leave a comment

Your email address will not be published. Required fields are marked *