Very odd epoll_ctl calls in mail proxy
Robert Mueller
robm at fastmail.fm
Tue Nov 8 01:04:01 UTC 2011
I'm using nginx 1.0.8 in mail proxy mode and when trying to track down a
particular issue I happened to do an strace of a process and found
something very odd.
Our config looks pretty straight forward.
mail {
auth_http unix:/var/state/saslauthd/nginx:/;
imap_client_buffer 16k;
pop3_capabilities "SASL OTP" "EXPIRE NEVER" "LOGIN-DELAY 0" ... ;
imap_capabilities "IMAP4" "IMAP4rev1" "LITERAL+" ... ;
server {
listen 66.111.4.61:110;
... a number of other ips
protocol pop3;
proxy on;
proxy_timeout 5m;
proxy_pass_error_message on;
auth_http_header "ServerHostname" "mail.messagingengine.com";
}
server {
listen 66.111.4.61:143;
... a number of other ips
protocol imap;
proxy on;
proxy_timeout 1h;
auth_http_header "ServerHostname" "mail.messagingengine.com";
}
... a number of other similar server blocks including ssl ones
}
Here's what the strace of the nginx process on our server looked like
(20k concurrent connections across 8 procs).
17:55:00.682440 read(599, 0xac4ba60, 34821) = -1 EAGAIN (Resource
temporarily unavailable)
17:55:00.682551 sendto(4128, "cick SELECT \"INBOX."..., 68, 0, NULL, 0)
= 68
17:55:00.682674 epoll_ctl(203, EPOLL_CTL_DEL, 7, {0, {u32=0, u64=0}}) =
0
17:55:00.682770 epoll_ctl(203, EPOLL_CTL_DEL, 8, {0, {u32=0, u64=0}}) =
0
... 170 lines or so of the same thing deleted ...
17:55:00.710905 epoll_ctl(203, EPOLL_CTL_DEL, 177, {0, {u32=0, u64=0}})
= 0
17:55:00.710997 epoll_ctl(203, EPOLL_CTL_DEL, 178, {0, {u32=0, u64=0}})
= 0
17:55:00.711092 epoll_ctl(203, EPOLL_CTL_DEL, 179, {0, {u32=0, u64=0}})
= 0
17:55:00.711184 epoll_wait(203, {{EPOLLIN|EPOLLOUT, {u32=2113145168,
u64=139674449611088}}, ...
17:55:00.711327 recvfrom(4128, "* OK [CLOSED] Ok\r\n* 37
EXISTS\r\n*"..., 4096, 0, NULL, NULL) = 344
... lots more read/write/recvfrom/sendto/epoll_wait calls
17:55:00.815683 sendto(3271, "6 EXPUNGE\r\n", 11, 0, NULL, 0) = 11
17:55:00.815820 epoll_ctl(203, EPOLL_CTL_ADD, 7, {EPOLLIN,
{u32=2112495632, u64=139674448961552}}) = 0
17:55:00.815947 epoll_ctl(203, EPOLL_CTL_ADD, 8, {EPOLLIN,
{u32=2112495824, u64=139674448961744}}) = 0
... 170 lines or so of the same thing deleted ...
17:55:00.849680 epoll_ctl(203, EPOLL_CTL_ADD, 178, {EPOLLIN,
{u32=2112528464, u64=139674448994384}}) = 0
17:55:00.850305 epoll_ctl(203, EPOLL_CTL_ADD, 179, {EPOLLIN,
{u32=2112528656, u64=139674448994576}}) = 0
17:55:00.850466 epoll_wait(203, {{EPOLLIN|EPOLLOUT, {u32=2113156497,
u64=139674449622417}}, ...
17:55:00.850638 accept4(105, {sa_family=AF_INET, sin_port=htons(4899),
sin_addr=inet_addr("a.a.a.a")}, [16], SOCK_NONBLOCK) = 4356
17:55:00.850784 write(5, "2011/11/07 17:55:00 [info] 24092"..., 94) = 94
... lots more read/write/recvfrom/sendto/epoll_wait calls
17:55:00.861272 recvfrom(3471, 0x8653b70, 4096, 0, 0, 0) = -1 EAGAIN
(Resource temporarily unavailable)
17:55:00.861404 epoll_ctl(203, EPOLL_CTL_DEL, 7, {0, {u32=0, u64=0}}) =
0
17:55:00.861514 epoll_ctl(203, EPOLL_CTL_DEL, 8, {0, {u32=0, u64=0}}) =
0
... 170 lines or so again just like above ...
I see this over and over, the same fd's (7-179) added and removed over
and over again quite rapidly.
So why would nginx be adding 170 fd's to it's epoll descriptor, then
deleting those 170 fd's a fraction later, and repeating that over and
over?
Rob
Rob Mueller
robm at fastmail.fm
More information about the nginx-devel
mailing list