【发布时间】:2021-06-19 04:59:09
【问题描述】:
我使用 node-influx 和 influx.query(...) 使用太多堆。
在我的应用程序中,我有类似的东西
const data = await influx.query(`SELECT "f_power" as "power", "nature", "scope", "participantId"
FROM "power"
WHERE
"nature" =~ /^Conso$|^Prod$|^Autoconso$/ AND
"source" =~ /^$|^One$|^Two AND
"participantId" =~ /${participantIdFilter.join('|')}/ AND
"time" >= '${req.query.dateFrom}' AND
"time" <= '${req.query.dateTo}'
GROUP BY "timestamp"
`);
wb = dataToWb(data)
XLSX.writeFile(wb, filename);
数据是一个大约50M的结果集(I used this code) 而且这个方法使用的堆大约是350M(我用的是process.memoryUsage().heapUsed)
我对这两个值之间的差异感到惊讶... 那么是否有可能使这个查询的资源消耗更少?
其实我是用data来制作xlsx文件的。并且该文件的生成导致节点进程内存不足。方法 XLSX.writeFile(wb, filename) 使用大约 100M。这还不够填满我的 512M RAM。所以我认为这是流入查询使用的堆,GC 永远不会收集它。
其实我不明白为什么一代人会犯这个错误。为什么 V8 不能释放在另一个上下文中执行的方法使用的内存?
【问题讨论】:
标签: node.js memory memory-leaks influxdb