Exception of type 'System.OutOfMemoryException' was thrown.
Problem reported by Scarab - 12/23/2015 at 3:40 PM
I'm posting this here in case anyone experiences this maddening problem in SmarterMail.
A couple of days ago we started experiencing a problem with email from one particular sender repeatedly bouncing with a "rsp: 451 Requested action aborted: error in processing". We didn't think much of it. The next day it was happening to a couple dozen senders but we couldn't find the common denominator. The day after that it was happening to half of the incoming mail to one of our Gateways (the other two Gateways were seemingly fine). It took the better part of an entire work day to track down the underlying cause.
Our detailed SMTP Logs showed the following error:
14:35:56 [7676779] Exception: Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Collections.Generic.Dictionary`2.Resize()
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at MailStore.Spam.GreyListManager.IsBlocked(String sendersIP, String returnPath, String recipientAddress, TimeSpan& timeLeft)
   at MailService.TcpServerLib.SMTP.SMTPSession.#web(String )
   at MailService.TcpServerLib.SMTP.SMTPSession.#veb(String )
   at MailService.TcpServerLib.SMTP.SMTPSession.ProcessAsyncCommand(String smtpCommandText)
Basically .NET didn't have enough SystemMemory to continue handling processing the incoming email (despite System Memory Usage being at 5% average and 25% peak). It seemed to be encountering this during GreyList checks on an email address after the sending Mail Server provided the cmd: MAIL FROM: and cmd: RCPT TO:
Turns out we had set our Greylisting Options in SmarterMail to match Bruce's suggestions in his Anti-Spam document (which really is wonderfully useful). So we had the Greylisting Record Expiration set to 288 days. Problem is that each of our Gateways gets around 10-20 million attempted connections a day. Eventually our \Smartermail\Service\greyList.dat file had gotten too large to be parsed or modified by .NET (it grew an average of 50MB each day to about a 14.4GB file size on that Gateway).
Short-term solution: Reboot the server. This reset the greyList.dat file back to 0KB. Reboot the server at least once a month/every other month.

Long-term solution: Set the Greylisting Record Expiration in Greylisting Options to 30-60 days limiting it to 1.5GB-3GB in size.

Note: Y.M.M.V. if your server OS is 64-bit instead of 32-bit and you have more RAM than your greyList.dat filesize (we are running a 32-bit OS with 4GB RAM on our Gateways).

Reply to Thread