Hello Jetty Experts ,
I have been working on the use case where i should create simple http server to serve ~1.5 - 2 Million Requests per Second per Instance ..
Recently i started doing benchmarking different servers and here is the result of Jetty.
20 threads and 40 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 0.95ms 669.89us 17.00ms 96.71%
Req/Sec 2.20k 170.21 2.95k 73.26%
Latency Distribution
50% 849.00us
75% 0.97ms
90% 1.14ms
99% 4.23ms
2622609 requests in 1.00m, 382.67MB read
Requests/sec: 43637.79
Transfer/sec: 6.37MB
At max i can see ~50K reqs/sec which is less for my use case ..
Here is the Jetty Server and Handler Code:
Server server = new Server();
String port = cmd.getOptionValue("p");
HttpConfiguration httpConfiguration = new HttpConfiguration();
httpConfiguration.setSendServerVersion(false);
httpConfiguration.setSendXPoweredBy(false);
ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfiguration));
httpConnector.setPort(Integer.parseInt(port));
httpConnector.setName("http");
httpConnector.setIdleTimeout(30000);
httpConnector.setSoLingerTime(20);
server.addConnector(httpConnector);
ContextHandler context = new ContextHandler();
context.setContextPath( "/helloworld" );
JettyHandler requestHandler = new JettyHandler();
HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(context);
handlers.addHandler(requestHandler);
server.setHandler(handlers);
server.start();
server.join();
public class JettyHandler extends AbstractHandler
{
public void handle( final String target, final Request baseRequest,
final HttpServletRequest request, final HttpServletResponse response
)
throws IOException, ServletException
{
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
final StringBuffer reqBuff = new StringBuffer();
String line = null;
BufferedReader reader = null;
try {
reader = request.getReader();
while ((line = reader.readLine()) != null)
reqBuff.append(line);
} catch (Exception e) { }
finally{reader.close();}
final PostToKafka post2Kafka = new PostToKafka();
try {
post2Kafka.write2Kafka(reqBuff.toString()); --> This is really High Performant :)..
} catch (Exception e) {
e.printStackTrace();
}
response.getWriter().println("SUCCESS");
}
}
How to tune Jetty Performance ?
--Senthil