You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vert.x单线程服务高并发API调用响应变慢问题求助

解决方案

1. 修复数据库连接泄漏问题

你的代码获取数据库连接后未正确释放,导致连接池中的连接被长期占用,并发请求增多时会出现连接耗尽、请求排队等待的情况。必须确保连接使用完毕后归还池:

dbClient.getConnection().compose(conn -> 
    testRepo.getListCities(conn) // 需确保Repo方法接收连接参数
        .onComplete(ar -> {
            // 无论请求成功或失败,都要释放连接
            conn.close();
            if (ar.succeeded()) {
                response.end(Json.encodePrettily(ar.result()));
            } else {
                response.end(Json.encodePrettily("example exception"));
            }
        })
);

更优方案:直接使用池的查询方法,无需手动管理连接
Vert.x的Pool内置了连接管理逻辑,直接调用其查询方法可以自动获取/归还连接,彻底避免手动管理的疏漏:

// 调整Repo实现,直接使用Pool执行查询
testRepo.getListCities(dbClient)
    .onSuccess(data -> response.end(Json.encodePrettily(data)))
    .onFailure(throwable -> response.end(Json.encodePrettily("example exception")));

2. 调整数据库连接池大小

当前连接池maxSize=5,当并发请求达到8-10时,已超过池的最大连接数,后续请求必须等待空闲连接释放。根据你的并发需求调整池大小,同时注意不要超过数据库实例允许的最大连接数(PostgreSQL默认最大连接数为100):

final PoolOptions poolOptions = new PoolOptions()
    .setMaxSize(10) // 根据并发量调整,比如设置为10或更高
    .setMinSize(5); // 配置最小空闲连接,减少连接创建开销

3. 排查数据库端瓶颈

如果修复连接泄漏、调整池大小后仍有问题,需检查数据库本身的性能:

  • 查看数据库CPU、内存使用率,确认是否存在资源瓶颈
  • 检查getListCities对应的SQL查询是否添加了合适的索引,执行计划是否高效
  • 监控数据库的连接队列,确认是否有请求在等待数据库连接

内容的提问来源于stack exchange,提问作者troonie-pham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:55:01