Sendmail slow?

Knute Johnson knute2009 at knutejohnson.com
Sun Feb 15 04:34:35 UTC 2009


Smoot Carl-Mitchell wrote:
> On Sat, 2009-02-14 at 17:15 -0800, Knute Johnson wrote:
>> Smoot Carl-Mitchell wrote:
>>> You might try running strace on the listening SMTP process with timer
>>> option to see where the delay is creeping in.  Something like
>>>
>>> sudo strace -f -p <pid> -o <output_file> -t
>>>
>>> You need the -f to pick up the forked processes as the listening
>>> sendmail handles the connections.  The -t will give you timestamps on
>>> each system call.
>> I sent the whole output but it was too big and rejected.  Anyway, this 
>> shows a 5 second gap but I don't know what it really means.  If you can 
>> decipher it, great!
>>
>> Thanks,
>>
> 
> Here is the blow by blow.
> 
> Read /etc/resolv.conf.  Likely getting the names of your nameservers.
>> 5092  17:05:19 stat64("/etc/resolv.conf", {st_mode=S_IFREG|0644, 
>> st_size=91, ...}) = 0
>> 5092  17:05:19 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 5
> 
> Connect to 207.181.0.10 (would not happen to be one of your
> nameservers?)  The connection descriptor is 5.
>> 5092  17:05:19 connect(5, {sa_family=AF_INET, sin_port=htons(53), 
>> sin_addr=inet_addr("207.181.0.10")}, 28) = 0
>> 5092  17:05:19 poll([{fd=5, events=POLLOUT, revents=POLLOUT}], 1, 0) = 1
> 
> Send a request to descriptor 5.  This does look like a DNS request.
>> 5092  17:05:19 send(5, 
>> "\331S\1\0\0\1\0\0\0\0\0\0\6knute2\faerioconnect"..., 41, MSG_NOSIGNAL) = 41
>> 5092  17:05:19 poll([{fd=5, events=POLLIN, revents=POLLIN}], 1, 5000) = 1
>> 5092  17:05:19 ioctl(5, FIONREAD, [57]) = 0
> 
> Read the response.
>> 5092  17:05:19 recvfrom(5, 
>> "\331S\205\200\0\1\0\1\0\0\0\0\6knute2\faerioconnect"..., 1024, 0, 
>> {sa_family=AF_INET, sin_port=htons(53), 
>> sin_addr=inet_addr("207.181.0.10")}, [16]) = 57
> 
> Close the connection.
>> 5092  17:05:19 close(5)                 = 0
> 
> Now set up a socket on port 587 which is the submit port. This is using
> descriptor 8. What is host 216.240.58.140, BTW?
>> 5092  17:05:19 getsockname(8, {sa_family=AF_INET, sin_port=htons(587), 
>> sin_addr=inet_addr("216.240.58.140")}, [16]) = 0
> 
> Read /etc/services.
>> 5092  17:05:19 open("/etc/services", O_RDONLY|0x80000 /* O_??? */) = 5
>> 5092  17:05:19 fstat64(5, {st_mode=S_IFREG|0644, st_size=18449, ...}) = 0
>> 5092  17:05:19 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, 
>> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7ed6000
>> 5092  17:05:19 read(5, "# Network services, Internet sty"..., 4096) = 4096
>> 5092  17:05:19 close(5)                 = 0
> 
> 
>> 5092  17:05:19 munmap(0xb7ed6000, 4096) = 0
>> 5092  17:05:19 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>> 5092  17:05:19 rt_sigprocmask(SIG_BLOCK, [ALRM], [], 8) = 0
>> 5092  17:05:19 time(NULL)               = 1234659919
>> 5092  17:05:19 rt_sigaction(SIGALRM, {0xb7f9e170, [], SA_RESTART}, 
>> {0xb7f9e170, [], SA_RESTART}, 8) = 0
> 
> Set an alarms for 5 seconds.
>> 5092  17:05:19 alarm(5)                 = 0
>> 5092  17:05:19 rt_sigprocmask(SIG_UNBLOCK, [ALRM], [ALRM], 8) = 0
> 
> New socket on descriptor 5.
>> 5092  17:05:19 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 5
> 
> Bind it to the address 216.240.58.140 which I assume is one of your
> local interface addresses.
>> 5092  17:05:19 bind(5, {sa_family=AF_INET, sin_port=htons(0), 
>> sin_addr=inet_addr("216.240.58.140")}, 16) = 0
> 
> And connect on descriptor 5.  This is connecting on port 113 which
> looking at /etc/services is the auth port. This trying to authenticate
> the sender of the email using the AUTH protocol. See RFC1413.  Your
> sendmail is trying to use AUTH to detemine the identity of the sender.
> You can disable this in your sendmail.mc file by adding
> 
> define(`confTO_IDENT',    `0s')dnl
> 
> to your sendmail.mc and yor submit.mc file after the include for
> debian-mta or debian-msp and redoing the make in /etc/mail.
>  
>> 5092  17:05:19 connect(5, {sa_family=AF_INET, sin_port=htons(113), 
>> sin_addr=inet_addr("216.240.58.138")}, 16 <unfinished ...>
> 
> 
> The alarm is triggered after 5 seconds which is the delay you are
> seeing.  So the AUTH protocol is the source of the delay.
>> 16288 17:05:24 <... select resumed> )   = 0 (Timeout)
> 

That's it!  No delay at all now.  Thanks very much for helping me figure 
this out.

-- 

Knute Johnson

"The urge to save humanity is almost always a false front for the urge 
to rule."

   H.L. Mencken





More information about the ubuntu-users mailing list