私はJettyとVertX.3のベンチマークテストを非同期サポートしています。以下は私のVertXのサンプルコードです。VertX vs Jettyパフォーマンスの問題
public class VertXSampleServer extends AbstractVerticle{
@Override
public void start(){
HttpServer server=vertx.createHttpServer();
server.requestHandler(new Handler<HttpServerRequest>() {
@Override
public void handle(HttpServerRequest request) {
HttpServerResponse response=request.response();
response.setStatusCode(HttpStatus.SC_OK);
System.out.println("re received");
response.putHeader("Content-Length", Integer.toString(5));
response.write("Hello");
}
}).listen(9091);
}
}
桟橋サンプルサーバ:
public class JettySampleAsyncServer
{
public static class EmbeddedAsyncServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
final AsyncContext ctxt = req.startAsync();
ctxt.start(new Runnable()
{
@Override
public void run()
{
System.out.println("In AsyncContext/Start/Runnable/run");
ServletResponse response=ctxt.getResponse();
byte[] result="<h1>Hello World</h1>".getBytes();
try {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
response.setContentLength(result.length);
response.getOutputStream().write(result);
} catch (IOException e) {
e.printStackTrace();
}
ctxt.setTimeout(new Long(1000));
ctxt.complete();
}
});
}
}
public static void main(String[] args) throws Exception
{
Server server = new Server();
QueuedThreadPool queuedThreadPool=(QueuedThreadPool) server.getThreadPool();
queuedThreadPool.setMaxThreads(8);
ServerConnector serverConnector=new ServerConnector(server,1,4);
serverConnector.setHost("localhost");
serverConnector.setPort(9090);
// serverConnector.setAcceptQueueSize(100);
server.addConnector(serverConnector);
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
ServletHolder asyncHolder = context.addServlet(EmbeddedAsyncServlet.class,"/*");
asyncHolder.setAsyncSupported(true);
server.setHandler(context);
server.start();
server.join();
}
}
VERTXをテストしながら、私は31件のリクエスト/分のスループットを取得しています。しかしテスト桟橋ながら、私は310 REQ /秒を取得しています。 誰も私にexaplinパフォーマンスのこの非常に高いギャップの理由を教えてください。また、私はベンチマークテストにApache Jmeterを使用しています。
パフォーマンスが重要な場合は、永続的な接続を持つWebソケットを使用することをお勧めします。 1回の接続で最大30,000リクエスト/秒を得ることができます。より低いレベルのプロトコルを使用する場合、1秒あたり数100,000/msgを達成することができます。 –
私たちは設計の初期段階で、jettyかVertXのどちらを選択するかを決めなければなりません。サンプルの実装でベンチマークテストを行っています。私が何かを見逃してしまった場合は教えてください –
Jettyを使用している30,000 msg /秒。私はあなたがテストしている方法が問題だと思っています。例えば接続を作成して削除すると、これはサーバーの作業と同じくらい高価になります。 –