Hi,
A list owner has reported that their list page for list of 3460 members crashes with "internal server error" when attempting to do mass operations such as unsubscribe all or large mass subscribe of many members.
Has anyone else experienced this?
Thanks,
Liam
On Wed, Dec 17, 2025 at 10:25 AM Liam Reilly <l.reilly@ucl.ac.uk> wrote:
Hi,
A list owner has reported that their list page for list of 3460 members crashes with "internal server error" when attempting to do mass operations such as unsubscribe all or large mass subscribe of many members.
Has anyone else experienced this?
And what did mailmanweb.log file say about this?
-- Best regards, Odhiambo WASHINGTON, Nairobi,KE +254 7 3200 0004/+254 7 2274 3223 In an Internet failure case, the #1 suspect is a constant: DNS. "Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-) [How to ask smart questions: http://www.catb.org/~esr/faqs/smart-questions.html]
Here is an example error from the log for unsubscribe all operation.
[2025-12-15 15:41:02 +0000] [1022464] [ERROR] Error handling request /mailman3/lists/uclucu-members.ucl.ac.uk/unsubscribe_all Traceback (most recent call last): File "/data/mailman/venv/lib64/python3.12/site-packages/gunicorn/workers/sync.py", line 134, in handle self.handle_request(listener, req, client, addr) File "/data/mailman/venv/lib64/python3.12/site-packages/gunicorn/workers/sync.py", line 177, in handle_request respiter = self.wsgi(environ, resp.start_response) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/wsgi.py", line 124, in __call__ response = self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/base.py", line 140, in get_response response = self._middleware_chain(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/allauth/account/middleware.py", line 33, in middleware response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/utils/deprecation.py", line 134, in __call__ response = response or self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/utils/deprecation.py", line 134, in __call__ response = response or self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/utils/deprecation.py", line 134, in __call__ response = response or self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/utils/deprecation.py", line 134, in __call__ response = response or self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/utils/deprecation.py", line 134, in __call__ response = response or self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/utils/deprecation.py", line 134, in __call__ response = response or self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/utils/deprecation.py", line 134, in __call__ response = response or self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/utils/deprecation.py", line 134, in __call__ response = response or self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django_mailman3/middleware/__init__.py", line 36, in __call__ response = self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/postorius/middleware.py", line 42, in __call__ return self.get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view return view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/postorius/auth/decorators.py", line 43, in wrapper return fn(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/postorius/views/list.py", line 1496, in remove_all_subscribers mlist.unsubscribe(names.email) File "/data/mailman/venv/lib64/python3.12/site-packages/mailmanclient/restobjects/mailinglist.py", line 519, in unsubscribe response, json = self._connection.call(path, data, method='DELETE') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/mailmanclient/restbase/connection.py", line 145, in call response = request(**params, auth=self.auth) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/requests/api.py", line 59, in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/requests/sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/requests/sessions.py", line 703, in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/requests/adapters.py", line 644, in send resp = conn.urlopen( ^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/urllib3/connectionpool.py", line 787, in urlopen response = self._make_request( ^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/urllib3/connectionpool.py", line 534, in _make_request response = conn.getresponse() ^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/urllib3/connection.py", line 565, in getresponse httplib_response = super().getresponse() ^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.12/http/client.py", line 1430, in getresponse response.begin() File "/usr/lib64/python3.12/http/client.py", line 331, in begin version, status, reason = self._read_status() ^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.12/http/client.py", line 292, in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.12/socket.py", line 720, in readinto return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/mailman/venv/lib64/python3.12/site-packages/gunicorn/workers/base.py", line 204, in handle_abort sys.exit(1) SystemExit: 1
From: Washington Odhiambo <odhiambo@gmail.com> Sent: 17 December 2025 07:34 To: mailman-users@mailman3.org Cc: Reilly, Liam <l.reilly@ucl.ac.uk> Subject: Re: [MM3-users] Mass operations on large list - Internal Server Error
⚠ Caution: External sender
On Wed, Dec 17, 2025 at 10:25 AM Liam Reilly <l.reilly@ucl.ac.uk<mailto:l.reilly@ucl.ac.uk>> wrote: Hi,
A list owner has reported that their list page for list of 3460 members crashes with "internal server error" when attempting to do mass operations such as unsubscribe all or large mass subscribe of many members.
Has anyone else experienced this?
And what did mailmanweb.log file say about this?
-- Best regards, Odhiambo WASHINGTON, Nairobi,KE +254 7 3200 0004/+254 7 2274 3223 In an Internet failure case, the #1 suspect is a constant: DNS. "Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-) [How to ask smart questions: http://www.catb.org/~esr/faqs/smart-questions.html]
Reilly, Liam writes:
Here is an example error from the log for unsubscribe all operation.
Which log is this? I would guess it's the mailmanweb.log.
[2025-12-15 15:41:02 +0000] [1022464] [ERROR] Error handling request /mailman3/lists/uclucu-members.ucl.ac.uk/unsubscribe_all Traceback (most recent call last): File "/data/mailman/venv/lib64/python3.12/site-packages/gunicorn/workers/sync.py", line 134, in handle self.handle_request(listener, req, client, addr)
This is the front-end gunicorn WSGI server, handling a request for Postorius.
File "/data/mailman/venv/lib64/python3.12/site-packages/mailmanclient/restobjects/mailinglist.py", line 519, in unsubscribe response, json = self._connection.call(path, data, method='DELETE') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This is mailman client translating to the REST API.
File "/usr/lib64/python3.12/socket.py", line 720, in readinto return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^
This is the Python socket library actually talking to the REST API of Mailman core. An unspecified error occurs in the C code. It is not handled.
File "/data/mailman/venv/lib64/python3.12/site-packages/gunicorn/workers/base.py", line 204, in handle_abort sys.exit(1) SystemExit: 1
This is the "Something's wrong, hope you have a clue 'cause I don't" last line of defense error handler.
My guess is that it's a timeout on a socket.
I think you should also see log messages and a traceback in the mailman.log.
The timeout for the mailmanweb gunicorn is configured in the gunicorn conf file, usually in /etc/mailman3. This is relatively short (I think my installation is default at 120 seconds).
The timeout for the REST API gunicorn is in site-packages/mailman/config/gunicorn.cfg. This is long (360 seconds) so if my conjecture about timeout is correct it's the mailmanweb gunicorn that's timing out. If you need to change this one, you may be able to simply put "timeout: 360" in the [webservice] section of your mailman.cfg file, but if that doesn't work you can copy gunicorn.cfg to /etc/mailman3/rest-wsgi.cfg, change the timeout in it, and add "configuration: /etc/mailman3/rest-wsgi.cfg" to the [webservice] section of mailman.cfg.
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
Stephen J. Turnbull wrote:
Here is an example error from the log for unsubscribe all operation. Which log is this? I would guess it's the mailmanweb.log. [2025-12-15 15:41:02 +0000] [1022464] [ERROR] Error handling request /mailman3/lists/uclucu-members.ucl.ac.uk/unsubscribe_all Traceback (most recent call last): File "/data/mailman/venv/lib64/python3.12/site-packages/gunicorn/workers/sync.py", line 134, in handle self.handle_request(listener, req, client, addr) This is the front-end gunicorn WSGI server, handling a request for Postorius. File "/data/mailman/venv/lib64/python3.12/site-packages/mailmanclient/restobjects/mailinglist.py", line 519, in unsubscribe response, json = self._connection.call(path, data, method='DELETE') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This is mailman client translating to the REST API. File "/usr/lib64/python3.12/socket.py", line 720, in readinto return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ This is the Python socket library actually talking to the REST API of Mailman core. An unspecified error occurs in the C code. It is not handled. File "/data/mailman/venv/lib64/python3.12/site-packages/gunicorn/workers/base.py", line 204, in handle_abort sys.exit(1) SystemExit: 1 This is the "Something's wrong, hope you have a clue 'cause I don't" last line of defense error handler. My guess is that it's a timeout on a socket. I think you should also see log messages and a traceback in the mailman.log. The timeout for the mailmanweb gunicorn is configured in the gunicorn conf file, usually in /etc/mailman3. This is relatively short (I
Reilly, Liam writes: think my installation is default at 120 seconds). The timeout for the REST API gunicorn is in site-packages/mailman/config/gunicorn.cfg. This is long (360 seconds) so if my conjecture about timeout is correct it's the mailmanweb gunicorn that's timing out. If you need to change this one, you may be able to simply put "timeout: 360" in the [webservice] section of your mailman.cfg file, but if that doesn't work you can copy gunicorn.cfg to /etc/mailman3/rest-wsgi.cfg, change the timeout in it, and add "configuration: /etc/mailman3/rest-wsgi.cfg" to the [webservice] section of mailman.cfg.
GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
As always, thank you for your prompt replies Stephen.
The entries are from error.log and are all I could find when grepping for the list name. I'll check the other logs for anything else and also try increasing the timeout config as you've suggested to see if it helps.
participants (4)
-
Liam Reilly -
Reilly, Liam -
Stephen J. Turnbull -
Washington Odhiambo