Handle Deep Queues
To understand the potential problems associated with
deep queues, first consider how
sendmail processes a single
queue when its
QueueSortOrder option (QueueSortOrder on page 1073) is set to
the default of
priority. When sendmail is
instructed to process a queue it opens the queue
directory for reading and reads that directory to
gather a list of
qf files to process. Each
sendmail finds is opened for
reading and scanned for important pieces of
N line in each
qf file, for example, holds the number
of times the message has been tried. The
P line holds each
message’s current priority.
After all messages have been opened, read, and closed, and after the information from each has been saved internally, sendmail sorts that information. The purpose of the sort is to ensure that new mail is tried before old, and that high-priority mail is tried before low-priority mail.
Under normal circumstances, this process occurs quickly. But when queues get abnormally deep, things can go wrong. In the following, which illustrates a problem that can occur, we show one way that sendmail could be run on a major mail-sending machine:
/usr/sbin/sendmail -bd /usr/sbin/sendmail -q10m
The idea here is to create two mail-handling daemons. The first handles inbound mail, and because this is a mail-sending machine, we expect that this inbound daemon will perform little work. The second daemon sends all mail it finds in its queue. It will fork(2) a copy of itself once ...