Hi Trustin,<div><br></div><div>Yes, ab does not stress the system as much as httperf, which I actually compiled according to this article:</div><div><br></div><div>  <a href="http://gom-jabbar.org/articles/2009/02/04/httperf-and-file-descriptors">http://gom-jabbar.org/articles/2009/02/04/httperf-and-file-descriptors</a></div>

<div><br></div><div>httperf will often return error code &quot;98&quot;, which is, according to errno.h is</div><div><br></div><div><div>  #define EADDRINUSE      98      /* Address already in use */</div><div><br></div>
<div>
which doesn&#39;t make much sense. I also run the same test on a linode slice, theand did not experiment any problem around 3K connections, but there are still conncetion resets.</div><div><br></div><div> -- Sébastien</div>

<div><br></div><br><div class="gmail_quote">2010/1/8 &quot;Trustin Lee (이희승)&quot; <span dir="ltr">&lt;<a href="mailto:trustin@gmail.com">trustin@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hi,<br>
<br>
Thank you very much for further investigation!<br>
<br>
It is interesting that you don&#39;t get any error with ab.  ab might not be<br>
fast enough or httpperf has different behavior.<br>
<br>
In your previous message:<br>
<div class="im"><br>
&gt;&gt;&gt;&gt; Errors: total 2236 client-timo 0 socket-timo 0 connrefused 0<br>
connreset 0<br>
&gt;&gt;&gt;&gt; Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 2236<br>
<br>
</div>could you figure out what the &#39;other&#39; causes are?  Are they simply<br>
&#39;connection reset by peer&#39; error, or something else?<br>
<br>
I will run the test by myself soon and get back to you anyway.<br>
<br>
Thanks again,<br>
<font color="#888888">Trustin<br>
</font><div><div></div><div class="h5"><br>
Sébastien Pierre wrote:<br>
&gt; Hello !<br>
&gt;<br>
&gt; So I did the comparison between Netty and HttpCore/NIO Netty, and I can<br>
&gt; confirm the behaviour I saw before:<br>
&gt;<br>
&gt; - *Netty produces more errors than HttpCore/NIO*, dropping connections when<br>
&gt; concurency is between 3000 and 5000<br>
&gt; - HttpCore/NIO is slighly less performant, but significantly less errors<br>
&gt; overall<br>
&gt;<br>
&gt; I used the stock Netty HTTP snoop example (see previous message in this<br>
&gt; thread) and a modified version of the NHttpServer example of HttpCore<br>
&gt; (attached). To compiled it and run it, do the following in HttpCore&#39;s<br>
&gt; repository:<br>
&gt;<br>
&gt;  javac -cp<br>
&gt; httpcore/target/httpcore-4.1-alpha2-SNAPSHOT.jar:./httpcore-nio/target/httpcore-nio-4.1-alpha2-SNAPSHOT.jar<br>
&gt; NHttpServer.java<br>
&gt;  java -cp<br>
&gt; .:httpcore/target/httpcore-4.1-alpha2-SNAPSHOT.jar:./httpcore-nio/target/httpcore-nio-4.1-alpha2-SNAPSHOT.jar<br>
&gt; NHttpServer<br>
&gt;<br>
&gt; The test I run is the httperf-based benchmark. as presented earlier. I also<br>
&gt; started by doing multiple &#39;ab&#39; benchmarks to see if connections errors may<br>
&gt; appear, but I didn&#39;t get any. I still don&#39;t know if the errors are related<br>
&gt; to improper system configuration, but  among the various tests I&#39;ve run,<br>
&gt; I&#39;ve seen Netty drop connections and become non-reactive more often than<br>
&gt; HttpCore/NIO.<br>
&gt;<br>
&gt; I also attached the HttpCore/NIO test case as well sa graphs illustrating<br>
&gt; the test results or running httperf on both.<br>
&gt;<br>
&gt; Cheers,<br>
&gt;<br>
&gt;  -- Sébastien<br>
&gt;<br>
&gt;<br>
&gt; Le 7 janvier 2010 13:16, Sébastien Pierre &lt;<a href="mailto:sebastien.pierre@gmail.com">sebastien.pierre@gmail.com</a>&gt; a<br>
&gt; écrit :<br>
&gt;<br>
&gt;&gt; Hi Trustin,<br>
&gt;&gt;<br>
&gt;&gt; So I checked the number of sockets in *_WAIT state on both client and<br>
&gt;&gt; server machines, using the following commands<br>
&gt;&gt;<br>
&gt;&gt; server&gt; watch -n1 &#39;lsof -nl | egrep &quot;TCP|UDP&quot; | grep &quot;java&quot; | wc -l &#39;<br>
&gt;&gt; client&gt; watch -n1 &#39;lsof -nl | grep WAIT | wc -l&#39;<br>
&gt;&gt;<br>
&gt;&gt; the number of opened sockets on the server oscillates between 0 and 500,<br>
&gt;&gt; while the number of *WAIT sockets on the client is always 0, so I doubt it&#39;s<br>
&gt;&gt; related to an overflow of TIME_WAIT or CLOSE_WAIT.<br>
&gt;&gt;<br>
&gt;&gt; I&#39;ll prepare more detailed tests with the HttpCore/NIO version.<br>
&gt;&gt;<br>
&gt;&gt;  -- Sébastien<br>
&gt;&gt;<br>
&gt;&gt; 2010/1/6 &quot;Trustin Lee (이희승)&quot; &lt;<a href="mailto:trustin@gmail.com">trustin@gmail.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt; Hi Sébastien,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; You might be running out of available ports due to many TIME_WAIT either<br>
&gt;&gt;&gt; on the client or server side.  Could you confirm it?  If so, you need to<br>
&gt;&gt;&gt; wait until the TIME_WAIT state is cleared between each run.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; If HttpCore/NIO version works fine when Netty fails, I&#39;d like to compare<br>
&gt;&gt;&gt; the two to see what the differences are.  Please paste or attach the<br>
&gt;&gt;&gt; source code.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt; Trustin<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Sébastien Pierre wrote:<br>
&gt;&gt;&gt;&gt; Hi there !<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I just moved a test HTTP service from HttpCore/NIO to Netty based on the<br>
&gt;&gt;&gt;&gt; HTTP snoop example. I experienced (despite good performance at first)<br>
&gt;&gt;&gt; that<br>
&gt;&gt;&gt;&gt; the server is dropping connections when the load is heavy. To reproduce<br>
&gt;&gt;&gt;&gt; this, simply start the snoop example:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; java -cp ./src/main/java/:./jar/netty-3.2.0.ALPHA2.jar<br>
&gt;&gt;&gt;&gt; org.jboss.netty.example.http.snoop.HttpServer<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; and then do<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; python -c&#39;for r in range(500,10500,500): import os ; os.system(&quot;httperf<br>
&gt;&gt;&gt;&gt; --hog --timeout=60 --client=0/1 --server=127.0.0.1 --port=8080 --uri=/<br>
&gt;&gt;&gt;&gt; --rate=%s --send-buffer=4096 --recv-buffer=16384 --num-conns=10000<br>
&gt;&gt;&gt;&gt; --num-calls=1&quot; % (r))&#39;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; which is the same as running this command with --rate growing from 500<br>
&gt;&gt;&gt; to<br>
&gt;&gt;&gt;&gt; 10000 with 500 increases.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; httperf --hog --timeout=60 --client=0/1 --server=127.0.0.1 --port=8080<br>
&gt;&gt;&gt;&gt; --uri=/ --rate=500 --send-buffer=4096 --recv-buffer=16384<br>
&gt;&gt;&gt; --num-conns=10000<br>
&gt;&gt;&gt;&gt; --num-calls=1<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; so in this example, Netty often drops connections between rates of 3000<br>
&gt;&gt;&gt; and<br>
&gt;&gt;&gt;&gt; 5000, which you&#39;ll see in httpperf&#39;s log with the following lines:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; httperf: connection failed with unexpected error 98<br>
&gt;&gt;&gt;&gt; ...<br>
&gt;&gt;&gt;&gt; Errors: total 2236 client-timo 0 socket-timo 0 connrefused 0 connreset 0<br>
&gt;&gt;&gt;&gt; Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 2236<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I attached a graph where you&#39;ll see that for the rate=4000 and<br>
&gt;&gt;&gt; rate=45000<br>
&gt;&gt;&gt;&gt; the server just dropped all the connections (from httperf&#39;s perspective<br>
&gt;&gt;&gt; at<br>
&gt;&gt;&gt;&gt; least). So do you know any way to prevent or at least detect that ?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Thanks !<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;  -- Sébastien<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; PS: I should add that I&#39;ve run the test a couple of times, and quite<br>
&gt;&gt;&gt; often<br>
&gt;&gt;&gt;&gt; have trouble in the rate=3000-5000 range<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ------------------------------------------------------------------------<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; netty-users mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:netty-users@lists.jboss.org">netty-users@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/netty-users" target="_blank">https://lists.jboss.org/mailman/listinfo/netty-users</a><br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; what we call human nature in actuality is human habit<br>
&gt;&gt;&gt; <a href="http://gleamynode.net/" target="_blank">http://gleamynode.net/</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; netty-users mailing list<br>
&gt;&gt;&gt; <a href="mailto:netty-users@lists.jboss.org">netty-users@lists.jboss.org</a><br>
&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/netty-users" target="_blank">https://lists.jboss.org/mailman/listinfo/netty-users</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt; ------------------------------------------------------------------------<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; netty-users mailing list<br>
&gt; <a href="mailto:netty-users@lists.jboss.org">netty-users@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/netty-users" target="_blank">https://lists.jboss.org/mailman/listinfo/netty-users</a><br>
<br>
--<br>
what we call human nature in actuality is human habit<br>
<a href="http://gleamynode.net/" target="_blank">http://gleamynode.net/</a><br>
<br>
<br>
</div></div><br>_______________________________________________<br>
netty-users mailing list<br>
<a href="mailto:netty-users@lists.jboss.org">netty-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/netty-users" target="_blank">https://lists.jboss.org/mailman/listinfo/netty-users</a><br>
<br></blockquote></div><br></div>