[undertow-dev] Undertow Http Server - Handling 2 Millions Requests Per Second Per Instance

SenthilKumar K senthilec566 at gmail.com
Thu Jun 22 14:27:34 EDT 2017


Seems to Reading Request body is wrong , So what is the efficient way of
reading request body in undertow ?

--Senthil

On Thu, Jun 22, 2017 at 11:30 PM, SenthilKumar K <senthilec566 at gmail.com>
wrote:

> Hello Undertow Dev Team ,
>
>       I have been working on the use case where i should create simple
> http server to serve 1.5 Million Requests per Second per Instance ..
>
>
> Here is the benchmark result of Undertow :
>
> Running 1m test @ http://127.0.0.1:8009/
>   20 threads and 40 connections
>   Thread Stats   Avg      Stdev     Max   +/- Stdev
>     Latency     2.51ms   10.75ms 282.22ms   99.28%
>     Req/Sec     1.12k   316.65     1.96k    54.50%
>   Latency Distribution
>      50%    1.43ms
>      75%    2.38ms
>      90%    2.90ms
>      99%   10.45ms
>   1328133 requests in 1.00m, 167.19MB read
> Requests/sec:  *22127*.92
> Transfer/sec:      2.79MB
>
> This is less compared to other frameworks like Jetty and Netty .. But
> originally Undertow is high performant http server ..
>
> Hardware details:
> Xeon CPU E3-1270 v5 machine with 4 cores ( Clock 100 MHz, Capacity 4 GHz)
> , Memory : 32 G , Available memory 31 G.
>
> I would need Undertow experts to review the server code below and advice
> me on tuning to achieve my goal( ~1.5 Million requests/sec ).
>
> Server :
>
> Undertow server = Undertow.builder()
>                .addHttpListener(8009, "localhost")
>                .setHandler(new Handler()).build();
> server.start();
>
>
> Handler.Java
>
>     final Pooled<ByteBuffer> pooledByteBuffer =
>                  exchange.getConnection().getBufferPool().allocate();
> final ByteBuffer byteBuffer = pooledByteBuffer.getResource();
>    byteBuffer.clear();
>    exchange.getRequestChannel().read(byteBuffer);
>    int pos = byteBuffer.position();
>    byteBuffer.rewind();
>    byte[] bytes = new byte[pos];
>    byteBuffer.get(bytes);
>    String requestBody = new String(bytes, Charset.forName("UTF-8") );
>    byteBuffer.clear();
>    pooledByteBuffer.free();
>    final PostToKafka post2Kafka = new PostToKafka();
> try {
> *post2Kafka.write2Kafka(requestBody);  { This API can handle  ~2 Millions
> events per sec }*
> } catch (Exception e) {
> e.printStackTrace();
> }
>     exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
>     exchange.getResponseSender().send("SUCCESS");
>
>
> --Senthil
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/undertow-dev/attachments/20170622/8a1fcade/attachment.html 


More information about the undertow-dev mailing list