Этот кусок кода создает утечку памяти. Я не уверен, почему. Этот код ограничен более длинным методом, который опробовал список REDIS для сообщений (который возвращает либо сообщение, либо нечестно, если сообщения нет), а затем когда -нибудь ожидает, прежде чем снова опросить. но я вынул отвлекающие части. < /p>
Код: Выделить всё
async pollQ() {
while (true) {
await new Promise((resolve) =>
setTimeout(resolve, 100 + 100 * Math.random()),
);
}
}
В последовательных снимках кучи, с помощью этого тела метода есть объект, такой как {созданный, родитель} с большой позитивной дельтой (в тысячах), который растет со временем и цепочки, подобные объектам, как это:
I've also tried using a setTimeout version that repeatedly calls pollQ at the end of the метод Это дает тот же результат, когда есть другие ожидаемые вызовы (вызовы REDIS).
Я попытался использовать функцию драйвера в надежде, что когда будет выполнена область PollQ , все будет GC-ED. Но у этого была такая же проблема. < /P>
Код: Выделить всё
const driver = (() => {
this.pollQ().finally(() => {
setTimeout(driver, 100 + 100 * Math.random())
})
}).bind(this)
driver()
только выполнение SetInterval (pollq, ) работает без непрерывной растущей кучи, но это не идеально, учитывая, что процесс может не завершить в интервале. На данный момент у меня нет идей, и, что более важно, я не понимаю утечки. Код не выглядит так, как будто создаст утечку, но куча продолжает расти. Любая помощь ценится.
Подробнее здесь:
https://stackoverflow.com/questions/795 ... emory-leak