Sorry , I'm not an expert in JVM .. How do we do Warm Up JVM ?
Here is the JVM args to Server:
nohup java -Xmx4g -Xms4g -XX:MetaspaceSize=96m -XX:+UseG1GC
-XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35
-XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50
-XX:MaxMetaspaceFreeRatio=80 -cp undertow-0.0.1.jar HelloWorldServer
--Senthil
On Fri, Jun 23, 2017 at 2:23 AM, Antoine Girard <antoine.girard(a)ymail.com>
wrote:
Do you warm up your jvm prior to the testing?
Cheers,
Antoine
On Thu, Jun 22, 2017 at 10:42 PM, SenthilKumar K <senthilec566(a)gmail.com>
wrote:
> Thanks Bill n Antoine ..
>
>
> Here is the updated one : ( tried without Kafka API ) .
>
> public class HelloWorldServer {
>
> public static void main(final String[] args) {
> Undertow server = Undertow.builder().addHttpListener(8009,
> "localhost").setHandler(new HttpHandler() {
> @Override
> public void handleRequest(final HttpServerExchange exchange) throws
> Exception {
> if (exchange.getRequestMethod().equals(Methods.POST)) {
> exchange.getRequestReceiver().receiveFullString(new
> Receiver.FullStringCallback() {
> @Override
> public void handle(HttpServerExchange exchange, String
> message) {
> System.out.println(" Received String ==>
"+message);
> exchange.getResponseSender().send(message);
> }
> });
> } else {
> exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
> exchange.getResponseSender().send("FAILURE");
> }
> }
> }).build();
> server.start();
> }
> }
>
>
> Oops seems to no improvement :
>
> Running 1m test @
http://localhost:8009/
> 100 threads and 1000 connections
> Thread Stats Avg Stdev Max +/- Stdev
> Latency 25.79ms 22.18ms 289.48ms 67.66%
> Req/Sec 437.76 61.71 2.30k 80.26%
> Latency Distribution
> 50% 22.60ms
> 75% 37.83ms
> 90% 55.32ms
> 99% 90.47ms
> 2625607 requests in 1.00m, 2.76GB read
> *Requests/sec: 43688.42*
> Transfer/sec: 47.08MB
>
>
> :-( :-( ..
>
>
> --Senthil
>
>
> On Fri, Jun 23, 2017 at 1:47 AM, Antoine Girard <antoine.girard(a)ymail.com
> > wrote:
>
>> You can use the Receiver API, specifically for that purpose.
>> On the exchange, call: getRequestReceiver();
>>
>> You will get a receiver object:
>>
https://github.com/undertow-io/undertow/blob/master/core/src
>> /main/java/io/undertow/io/Receiver.java
>>
>> On the receiver you can call: receiveFullString, you have to pass it a
>> callback that will be called when the whole body has been read.
>>
>> Please share your results when you test this further!
>>
>> Cheers,
>> Antoine
>>
>>
>> On Thu, Jun 22, 2017 at 8:27 PM, SenthilKumar K <senthilec566(a)gmail.com>
>> wrote:
>>
>>> 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(a)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
>>>>
>>>
>>>
>>> _______________________________________________
>>> undertow-dev mailing list
>>> undertow-dev(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/undertow-dev
>>>
>>
>>
>