Node.js对接Oracle NoSQL连接未释放导致CPU占用过高问题求助
管控Node.js应用与Oracle NoSQL过量打开连接的方案
Oracle NoSQL Node.js SDK没有传统意义上的连接池最大连接数配置项,其连接复用逻辑内置在NoSQLClient实例中,连接堆积问题可通过以下方式解决:
1. 规范NoSQLClient实例初始化规则
SDK的NoSQLClient实例本身内置连接复用能力,禁止每次处理业务请求时新建NoSQLClient实例,全局维护单实例即可,你当前的公共实例初始化方式符合规范,无需修改基础初始化逻辑。
2. 调整内置连接控制配置
可通过以下隐式配置限制连接创建、加速闲置资源回收,修改后的初始化代码如下:
public noSQLClient: NoSQLClient = new NoSQLClient({ serviceType: ServiceType.KVSTORE, endpoint: env.DB_HOST, // 新增连接控制配置 http2: true, // 强制启用HTTP/2多路复用,单连接可承载多并发请求,大幅降低连接创建量 idleTimeout: 10000, // 闲置连接自动关闭时间,单位毫秒,默认30000,可根据业务场景调低 timeout: 5000, // 单次请求超时时间,避免超时请求长期占住连接资源 maxConcurrentRequests: 100 // 单实例最大并发请求数,超过阈值的请求会排队而非新建连接 });
3. 补充异常场景资源释放逻辑
- 所有调用SDK数据操作API的逻辑必须添加
try/catch捕获异常,避免异常请求未正确标记资源释放状态 - 应用发布、停机等优雅下线场景,必须显式调用
noSQLClient.close()方法主动释放所有持有的连接
4. 高吞吐场景限流兜底
如果业务峰值并发量远超单实例承载上限,可在业务逻辑层添加请求限流规则,超过阈值的请求直接返回重试提示,避免瞬时请求量过高触发SDK批量新建连接,导致连接数无限堆积。
内容的提问来源于stack exchange,提问作者Arun Sai
相关产品推荐
相关产品推荐

