I have a newsletter mailing list of around 250,000 subscribers.
I recently moved to a new server with all the same specs (CPU Xeon E3-1230v2 3.3GHz, 16gb RAM), the only difference is the old server had a 480GB SSD drive, where as the new one has a regular 2,000 GB SATA3 Drive.
On the old server the php mailing list software would process the list in about an hour, sending everything to the Exim queue, which would then take around 12 hours to send the 250,000 messages.
On the new server, even though I have QUEUE_ONLY = true set in exim.conf, the php mailing list software takes 3 days to process the sending (compared to 1 hour), and the exim queue never gets above 1,000 or so (compared to the full 250,000 on the old server).
It almost looks as though it isn't queue-ing the messages but is actually sending each message one at a time.
I have added the following to exim.conf through CPanels advanced exim configuration manager:
Maximum message recipients (soft limit) - in exim.conf
Maximum message recipients before disconnect (hard limit) - in exim.conf
Limitations set in PHP.INI
You can configure extended logging parameters in the "log_selector" directive of exim.conf which might give you an idea of what's slowing down the queue processing. Apply some extra parameters to log_selector inside the exim config, restart Exim, see if this gives you some insight into the processing times.
The mail queue is always very small, now while sending a mailing the mail queue is just 200. So it appears the php script isn't able to process them to the queue fast enough to create a back log. On my previous server with the SSD drive the mail queue would go up to 200,000.
The following are the iostat -x 5 results. Does this indicate it is an IO bottleneck with the harddisk? It seems to always be near 100% util.