【问题标题】:Vertx http server instance number does not improve throughputVertx http 服务器实例数不会提高吞吐量
【发布时间】:2019-08-27 02:50:07
【问题描述】:

我正在使用 Vertx 3.8.0 构建一个 http 服务器。即使我将verticle的实例设置为大于1,也无法使用CPU(只能使用大约25%的CPU)。值得一提的是,当我将实例编号设置为时,我可以获得的最佳性能是1.

public class Runner {
    public static void main(String[] args) {

        VertxOptions vertxOptions = new VertxOptions().setPreferNativeTransport(true);
        vertxOptions.setEventLoopPoolSize(6);
        final HttpServerOptions options = new HttpServerOptions()
                .setTcpFastOpen(true)
                .setTcpNoDelay(true)
                .setTcpQuickAck(true);

        final Vertx vertx = Vertx.vertx(vertxOptions);

        DeploymentOptions deploymentOptions;
        deploymentOptions = new DeploymentOptions().setInstances(3);
        vertx.deployVerticle(() -> new AbstractVerticle() {
                    @Override
                    public void start(Future<Void> startFuture) {


                        vertx.createHttpServer(options)
                                .requestHandler(req -> {
                                    req.response().end("1");
                                })
                                .listen(8080, "0.0.0.0");
                    }
                }, deploymentOptions
        );
        System.out.println("Deployment done with pooling");
    }

}

我使用 apache benchmark 来测试服务器的吞吐量。

 ab -c 150 -n 100000 http://10.32.31.35:8080/api/values/

吞吐量大约为每秒 8k。服务器只使用了大约 25% 的 CPU。 如果我使用 http 的 keepalive,吞吐量约为 48k,CPU 约为 50%。

我使用 JMX 来监控服务器程序。似乎实例编号设置确实有效。处理请求的事件循环超过 1 个,但接受者事件循环很可能是瓶颈。

还有什么可以改进的吗? 我认为 vertx 的多个实例会有所帮助(如 docker),但没有更优雅的方式来利用计算资源吗?

【问题讨论】:

    标签: vert.x vertxoptions


    【解决方案1】:

    这个测试有一些无效的假设:

    1. 您认为您正在部署 3 台服务器,但它们部署在同一个端口上,因此实际上只有一台服务器在监听。无论如何,部署更多服务器并不会增加您的并发性
    2. 您的测试并没有过多地使用事件循环。您的大部分时间都浪费在建立新连接上。这就是您在使用keepalive 时看到“改进”的原因。这是纯粹的网络,而不是 Vert.x
    3. 确保您在单独的计算机上运行 ab,否则您将使用相同的资源进行竞争
    4. 无论如何不要期望看到某种 100% 的 CPU 利用率,因为实际上您并没有做任何 CPU 密集型操作

    【讨论】:

    • 我不想同意,但这正是我从测试中观察到的。 Acceptor 事件循环成为瓶颈。在同一个过程中,我无能为力。有没有我可以做的配置来增加接受者线程的“权力”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2017-11-30
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多