1

我有两个微服务。第一个通过 Vert.x 客户端调用第二个微服务,第二个微服务通过 Vert.x 客户端调用 solr。但是所有这些过程都存在延迟问题。响应在 3-4 秒内出现,这是性能瓶颈。quarkus 中是否有任何方法或工具可以进行性能分析并详细说明导致性能问题的所有代码片段?

public class SolrWebClient {

@Inject
public Vertx vertx;

WebClient client;

@PostConstruct
public void initialize() {
    this.vertx = Vertx.vertx();
    this.client = WebClient.create(vertx, new WebClientOptions().setDefaultPort(443).setSsl(true).setVerifyHost(false).setTrustAll(true));
}

public Uni<JsonObject> search(URL url, SolrQuery query,Integer timeout) {
    int port = url.getPort();
    if (port == -1 && "https".equals(url.getProtocol())) {
        port = 443;
    }
    if (port == -1 && "http".equals(url.getProtocol())) {
        port = 80;
    }
    HttpRequest<Buffer> request = client.post(port, url.getHost(), url.getPath()).timeout(timeout);
    return request.sendJson(query).map(resp -> {
        return resp.bodyAsJsonObject();
    }).onFailure().recoverWithUni(f -> {
        return Uni.createFrom().item(new JsonObject().put("solrError", f.getMessage()));
    });

}

}

在此之前,在第一个微服务中,我们有一个服务调用 dynamodb 来获取一些帐户记录,然后这个微服务提取用户的帐号并通过第二个微服务(负载平衡 solr 集群)在 solr 中搜索。但是我想通过某种工具或某种方式知道是什么导致了这个延迟问题,如果 quarkus 支持的话。

4

1 回答 1

0

我建议使用 Java Mission Control 和 Flight Recorder。

首先从这里下载任务控制https://github.com/openjdk/jmc(基于您的首选发行版)并启动它。

然后只需在本地启动您的 Quarkus 应用程序(我假设您打算在本地进行检查)。

之后转到您的任务控制并查看那里的 Java 应用程序列表(您的 Quarkus 应用程序现在应该在此处列出)。

您可以实时监控正在发生的事情,也可以启动飞行记录器。

做负载测试(我个人喜欢使用https://k6.io/),停止飞行记录并查看瓶颈。

于 2021-10-22T09:58:44.700 回答