
D. Hugh Redelmeier via talk wrote on 2025-02-01 11:14:
Why is all that space being used?
I would expect that most of the space is taken by immutable and hence shareable stuff (code).
I think this is correct: basically most of the processes are Python interpreters plus the scripts they're running.
Is this containerized in some way that prevents sharing?
No.
Is Python's runtime organized in some way that prevents sharing?
I don't think so, I think it's just that, instead of forking / spawning processes to handle events, it's using IPC or something to have the processes talk to each other. Probably more efficient on large, busy lists, but overkill for small ones. The Apache model of child processes being passed work loads would have been a *much* better option IMHO. Then it could be user-configurable.
Are these statistics counting shared memory multiple times?
I don't think so. Here's a Mailman v2 process list (lines trimmed to avoid wrapping): # systemctl status mailman /usr/bin/python2 /usr/lib/mailman/bin/mailmanctl -s start /usr/bin/python2 /var/lib/mailman/bin/qrunner --runner=ArchRunner /usr/bin/python2 /var/lib/mailman/bin/qrunner --runner=BounceRunner /usr/bin/python2 /var/lib/mailman/bin/qrunner --runner=CommandRunner /usr/bin/python2 /var/lib/mailman/bin/qrunner --runner=IncomingRunner /usr/bin/python2 /var/lib/mailman/bin/qrunner --runner=NewsRunner /usr/bin/python2 /var/lib/mailman/bin/qrunner --runner=OutgoingRunner /usr/bin/python2 /var/lib/mailman/bin/qrunner --runner=VirginRunner /usr/bin/python2 /var/lib/mailman/bin/qrunner --runner=RetryRunner I see in there a qrunner for NewsRunner, which is an NNTP bridge. Wish I knew how to disable that. We see similar with MM3, but many more in the main process and a couple / few uwsgi (something something gateway interface) for web request / REST processing). So, there's lots and lots of duplication, but Linux doesn't do memory de-duplication, so ... it's a resource hog for us hobbyists.