我正在使用Vertx3.8.0构建一个http服务器。即使当我将顶点的实例设置为大于1的实例时,也不能使用CPU (仅占CPU的25% )。我可以获得的最佳性能是将实例号设置为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基准测试服务器的吞吐量。
ab -c 150 -n 100000 http://10.32.31.35:8080/api/values/吞吐量大约为每秒8k。服务器只使用大约25%的CPU。如果我使用http保持活动,吞吐量约为48k,CPU约为50%。
我使用JMX来监视服务器程序。似乎实例号设置实际上起作用了。有超过一个事件循环处理请求,但它很可能是接收者事件循环的瓶颈。
还有改进的地方吗?我认为多个vertx实例会有所帮助(比如docker),但是难道没有更好的方法来利用计算资源吗?
发布于 2019-08-27 18:52:29
这个测试有一些无效的假设:
keepalive时看到“改进”的原因。这是纯粹的网络,而不是Vert.xab,或者在相同的资源上竞争https://stackoverflow.com/questions/57667109
复制相似问题