Hi,
I've been trying to stress the system a bit and i've come up against some issues, if anyone can shed light on them that'd be great...
I patched my local to add errno via sb-alien:get-errno, but couldn't find a decent portable solution.
---------------------------------------- case 1
Using /usr/sbin/ab2 -n 500000 -c 1000 http://localhost:16323/
Completed 300000 requests apr_recv: Connection timed out (110) Total of 312165 requests completed
meanwhile theres not a peep from the server
Starting server on "127.0.0.1" port 16323.. (socket fd is 7) waiting for events..
There are about 30k conns in the TIME_WAIT state
about a minute or two later we get:
poll-error occurred: 4 (EINTR) Poll-error, exiting.. 0
-------------------------------------------------- case 2
/usr/sbin/ab2 -n 500000 -c 1000 http://localhost:31273/ This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient) Completed 50000 requests Completed 100000 requests Completed 150000 requests Completed 200000 requests Completed 250000 requests Completed 300000 requests apr_recv: Connection reset by peer (104) Total of 329682 requests completed :~/projects/svn$ wget http://localhost:31273/ --18:00:12-- http://localhost:31273/ => `index.html.2' Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1|:31273... connected. HTTP request sent, awaiting response...
server: Starting server on "127.0.0.1" port 31273.. (socket fd is 8) waiting for events..
dump: 18:00:06.186009 IP localhost.31273 > localhost.44651: R 3993753736:3993753736(0) win 0 18:00:06.186014 IP localhost.31273 > localhost.44652: R 3990078422:3990078422(0) win 0 18:00:06.186018 IP localhost.31273 > localhost.44654: R 3993968120:3993968120(0) win 0 18:00:06.186682 IP localhost.59428 > localhost.31273: P 1:91(90) ack 1 win 8192 <nop,nop,timestamp 6481025 6481025> 18:00:06.186688 IP localhost.31273 > localhost.59428: . ack 91 win 8192 <nop,nop,timestamp 6481025 6481025> 18:00:06.186704 IP localhost.35785 > localhost.31273: F 91:91(0) ack 331 win 8192 <nop,nop,timestamp 6481025 6481024> 18:00:06.186710 IP localhost.31273 > localhost.35785: . ack 92 win 8192 <nop,nop,timestamp 6481025 6481025> 18:00:06.186739 IP localhost.35795 > localhost.31273: S 4233400977:4233400977(0) win 32767 <mss 16396,sackOK,timestamp 6481025 0,nop,wscale 2> 18:00:06.186748 IP localhost.31273 > localhost.35795: S 3999548339:3999548339(0) ack 4233400978 win 32767 <mss 16396,sackOK,timestamp 6481025 6481025,nop,wscale 2> 18:00:06.186755 IP localhost.35795 > localhost.31273: . ack 1 win 8192 <nop,nop,timestamp 6481025 6481025> 18:00:06.187104 IP localhost.31273 > localhost.35788: P 1:330(329) ack 91 win 8192 <nop,nop,timestamp 6481025 6481024> 18:00:06.187111 IP localhost.35788 > localhost.31273: . ack 330 win 8192 <nop,nop,timestamp 6481025 6481025> 18:00:06.187119 IP localhost.31273 > localhost.35788: F 330:330(0) ack 91 win 8192 <nop,nop,timestamp 6481025 6481025> 18:00:06.187148 IP localhost.35794 > localhost.31273: P 1:91(90) ack 1 win 8192 <nop,nop,timestamp 6481025 6481024> 18:00:06.187155 IP localhost.31273 > localhost.35794: . ack 91 win 8192 <nop,nop,timestamp 6481025 6481025> 18:00:06.187570 IP localhost.35795 > localhost.31273: F 1:1(0) ack 1 win 8192 <nop,nop,timestamp 6481025 6481025>
---------------------------------------------------- case 3
Tried tracking epoll_ctl returns in add-fd and getting EEXISTS for what looks like every connection.
----------------------------------------------------
Any help appreciated
Cheers,
Paul.
2006/10/3, Nonny Mouse enonymoos@gmail.com:
Hi,
I've been trying to stress the system a bit and i've come up against some issues, if anyone can shed light on them that'd be great...
I patched my local to add errno via sb-alien:get-errno, but couldn't find a decent portable solution.
case 3
Tried tracking epoll_ctl returns in add-fd and getting EEXISTS for what looks like every connection.
Hello,
The epoll_ctl(2) man page says, that "EEXIST: op was EPOLL_CTL_ADD, and the supplied file descriptor fd is already in epfd." so it seems that the code is trying to add the fd twice ?
There also a issue that the code will just add every incoming connection to the queue, which isn't necessarily a good idea, if the system is loaded. Maybe there should be a mechanism to see that if n connections are already being served, and if so, just drop additional connections until existing connections are closed..
Another slightly related issue is that, because the current design is single-threaded, if the thread is busy serving some connnection, it won't accept new connections until the serving has finished. Thus it might be better to have one thread accepting connections, and another one (or ones, if you have SMP) serving connections..
-r