alibaba / druid

阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
https://github.com/alibaba/druid/wiki
Apache License 2.0
27.97k stars 8.58k forks source link

1.2.11 使用默认参数配置,查询量一大,连接池不释放连接,后续请求都进入获取连接的等待队列中,一直不会被唤醒 #4827

Open niezhiliang opened 2 years ago

niezhiliang commented 2 years ago

环境 druid-spring-boot-starter:1.2.11 mysql-connector-java:8.0.2 mybatis-plus-boot-starter:3.3.2

配置如下: 1655201593389_F7181B90-2C67-4410-B32B-2D6AC1DA13E2

` @RestController @Slf4j public class PrintDruidInfoJob { @Autowired private DruidDataSource druidDataSource; @Autowired private GenerateFormulaService generateFormulaService;

ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);

/**
 * 2s打印一次数据源信息
 */
@PostConstruct
public void init() {
    executorService.scheduleAtFixedRate(() -> {
        log.info("Druid连接池信息 ---> ConnectCount:" + druidDataSource.getConnectCount() + "\tMaxActive:"
            + druidDataSource.getMaxActive() + "\tMaxWait:" + druidDataSource.getMaxWait() + "\tWaitThreadCount:"
            + druidDataSource.getWaitThreadCount() + "\tActiveConnections:" + druidDataSource.getActiveConnections()
            + "\tNotEmptyWaitThreadCount:" + druidDataSource.getNotEmptyWaitThreadCount());
    }, 10, 2, TimeUnit.SECONDS);
}

/**
 * 模拟业务代码
 * 
 * @return
 */
@GetMapping(value = "/")
public String test() {
    List<Long> stations = Arrays.asList(60110842953808L, 60110842963792L, 60110842920272L, 60110842923088L,
        60110842948176L, 60110842839888L, 60110842840912L, 60110842841936L, 60110842530384L, 60110842536784L);
    for (Long station : stations) {
        new Thread(() -> {
            // 这里查询的东西比较多
            generateFormulaService.generalFormula(station);
        }).start();
    }
    return "success";
}

} ` 我请求一次该接口,刚开始还能查询到数据,一会就直接阻塞啦, 后续请求该接口,请求都在获取数据库连接时被放到了阻塞队列中,整个过程中也不会释放连接,整个就卡死了,关于DB操作都被阻塞。

1655202737579

如果不用默认的参数,使用自定义参数的话,就能正常执行,不会阻塞啦。不知道这是不是一个bug

niezhiliang commented 2 years ago

修改后的配置: image

连接池信息:1655203326195

kiwimg commented 2 years ago

问题解决了吗 怎么解决的

niezhiliang commented 2 years ago

问题解决了吗 怎么解决的

我的是把连接池参数那些参数配上就行le

kimmking commented 2 years ago

默认的连接数不够用。 显式配置下,你可以试试把maxActive改成20看看。