LISTSERV is a single-threaded process, so when it gets busy distributing mail, it can take a non-trivial amount of time to transfer that mail to the SMTP MTA on your machine for delivery, particularly if the MTA is itself bogged down with traffic. While 'wa' requests do get priority between mail jobs, you are still likely to see a slowdown if you have a lot of mail going through the server at a given time.


The solution as far as LISTSERV is concerned is to take the burden of offloading the mail to the MTA off of its shoulders and instead deliver it in an asynchronous manner to the MTA. This is done by defining SMTP "worker" processes which LISTSERV spawns at run time for this purpose.


In order to define the asynchronous "worker" processes, add the following to your go.user file:


SMTP_FORWARD_1="2*nodename"

export SMTP_FORWARD_1


then stop and restart LISTSERV. "nodename" is the same value you have configured for NODE=. For instance, if you have


NODE="listserv.example.com"


then you should add


SMTP_FORWARD_1="2*listserv.example.com"

export SMTP_FORWARD_1


to go.user. The example shown will tell LISTSERV to spawn two (2) asynchronous SMTP worker processes. While you can tweak this number higher, it is best to start with just a couple of workers and then increase the number if necessary. Note that too many workers can lead to diminishing returns, as the more workers you have, the more system resources you will consume.


The difference between synchronous and asynchronous delivery should be considerable and your 'wa' sessions should run much faster even when LISTSERV is under load.