Память процесса растёт неделю, пока под не убивают за превышение лимита
const priceCache = new Map();
async function getPrice(productId, region) {
const key = `${productId}:${region}`;
if (!priceCache.has(key)) {
priceCache.set(key, await pricing.fetch(productId, region));
}
return priceCache.get(key);
}
Товаров 300 тысяч, регионов 85. Память процесса растёт линейно несколько дней, затем под перезапускается. Что не так?
- Кэш не ограничен ни размером, ни сроком жизни и хранит всё навсегда
- Map медленнее обычного объекта и тратит больше памяти
- Сборщик мусора в Node.js не освобождает объекты внутри Map
- Ключ-строка должен быть заменён на числовой
