@sentry/browser
@sentry/node
raven-js
raven-node
_(节点的乌鸦)_5.5.0
自 #1762 关闭以来创建一个新问题。
@sentry/node 中存在小的内存泄漏。 用一些长字符串调用setTag
使它变大很多。
这是可以识别的,因为它不仅是内存泄漏,而且根据我的 DO droplet 指标,它会导致 CPU 使用率和公共带宽永久增加,这只能通过重新启动服务器来修复。
图片显示了当我添加setTag
(7 月 11 日)和删除它时(8 月 9 日)会发生什么。
您能否为此提供一些重现案例? 具有多个并发请求的setTag
肯定会增加内存占用,但是一旦范围被 GC 处理,内存应该下降到基线。
@kamilogorek违规代码在这里: https :
从它的外观来看,范围没有被 GC 处理。
它可能不受欢迎,但我真正想要的是一个干净的 API 调用,它接受异常和变量。 例如Sentry.captureExpection(error, {tags: {foo: 1}})
。 这将摆脱范围和相关的内存泄漏。
withScope
在它的生命周期结束时执行popScope
操作,从内部数组中删除该层,因此没有对它的强引用 - GC 会自动处理它。
fwfw 您可以将呼叫更改为:
Sentry.withScope((scope) => {
scope.setUser(user)
scope.setTags(tags)
Sentry.captureException(error)
});
最有用的评论
@kamilogorek违规代码在这里: https :
从它的外观来看,范围没有被 GC 处理。
它可能不受欢迎,但我真正想要的是一个干净的 API 调用,它接受异常和变量。 例如
Sentry.captureExpection(error, {tags: {foo: 1}})
。 这将摆脱范围和相关的内存泄漏。