knex.js - 从 Knex.js 获取连接池统计信息
问题描述
我的 Knex 驱动程序出现间歇性错误:
TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
我猜想,要么是我的 RDS Aurora 实例暂时无法从服务器访问,要么是我的连接池在流量特别繁忙的时候用完了。我想记录并绘制连接池中可用连接与占用连接的图表,以查看我确实用尽了连接,以及连接使用高峰时是否存在特定点。但我似乎无法从谷歌那里找到是否有办法从 Knex 或其池管理器获取可用连接数。这可能吗?如果没有,是否有其他方法可以记录有关我的连接池的统计信息?
我看到有一个选项可以传递给连接池 init log
,它需要一个布尔值。我Winston
用来将我的日志发送到 Loggly,而不仅仅是发送 stdout 的内容。我不知道“log”属性会记录我感兴趣的事件,但无论如何我需要将该信息作为数据获取,以便我可以以有意义的方式将其发送到 Loggly。
解决方案
通过运行设置了环境变量的应用程序,您可以获得一些有关如何获取/返回连接池的信息DEBUG=knex:*
。
Knex 使用 tarn.js 作为其池实现。有一些获取池资源信息的方法https://github.com/vincit/tarn.js/在页面末尾列出。
// returns the number of non-free resources
pool.numUsed()
// returns the number of free resources
pool.numFree()
// how many acquires are waiting for a resource to be released
pool.numPendingAcquires()
// how many asynchronous create calls are running
pool.numPendingCreates()
池实例可以通过knex.client.pool
.
const knex = require('knex')({ client: 'pg', connection: 'postgres://knex_test' });
knex.client.pool.numPendingCreates(); // returns 0
推荐阅读
- php - 如何将变量从链接传递到laravel中的另一个视图
- html - 无法在具有文件上传和表单数据的 jmeter 中发送 POST 请求
- perl - 如何在 Mojolicious 中获取 IP 地址?
- jenkins - 如何在詹金斯管道中集成UCD?
- sprite - CSS Spritesheet 动画,顺时针然后逆时针
- python - python pandas数据框填充,例如bfill,ffill
- java - 在石英作业中使用@Autowired 服务
- python - 需要从 JSON 文件中截取一些不必要的信息并保留 JSON 结构
- python - VGG-16 和 ResNet 的最小输入大小是多少,我可以更改它们吗?
- css - 如何根据表格大小定位下拉或下拉