ER_CON_COUNT_ERROR:太多的连接Knex和Bookshelf



我已经使用Express,Knex和Bookshelf构建的简单REST API。

我正在与Jmeter进行一些性能测试,我注意到如果我调用执行以下查询的API,则没有问题:

public static async fetchById(id: number): Promise<DatasetStats> {
      return DatasetStats.where<DatasetStats>({ id }).fetch();
 }

datasetStats是书架模型

但是,如果我将jmeter设置为呼叫以下内容,我会有一个错误:er_con_count_error:一分钟后的连接太多:

import * as knex from 'knex';
@injectable()
export class MyRepo {
  private knex: knex;
  constructor() {this.knex = knex(DatabaseConfig); }
  async fetchResourcesList(datasetName: string): Promise<any> {
      return this.knex.distinct('resource').from(datasetName);
  }
}

问题可能是我为每个请求创建一个KNEX对象?

是。如果为每个请求创建新的KNEX实例,则无法控制与MySQL DB的并发连接总数。另外,您将无法从KNEX的连接池重新使用已经打开连接,因此在每个查询上打开与数据库的新TCP连接非常低的效率。另外,如果您在查询之后不破坏KNEX实例,则连接将保持打开状态,直到某些闲置超时 应用程序会泄漏内存。

最新更新