Как я могу узнать, когда моему приложению не хватает памяти.
Что касается меня, я выполняю транскодирование видео на сервере, и иногда это приводит к ошибкам нехватки памяти.
Итак, я хочу знать, когда приложению не хватает памяти, чтобы я мог немедленно отключить Video Transcoder.
Спасибо.
Проверьте используемую динамическую память. Как вы транскодируете видео? Вы используете потоки или буферизуете ввод/вывод? Я бы предложил ffmpeg, когда дело доходит до работы с медиафайлами.
Вы можете увидеть, сколько памяти используется со встроенным модулем process
.
const process = require("process");
В модуле process
есть метод memoryUsage
, который показывает информацию об использовании памяти в Node.js.
console.log(process.memoryUsage());
Когда вы запускаете код, вы должны увидеть объект со всей информацией, необходимой для использования памяти!
$ node index.js
{
rss: 4935680,
heapTotal: 1826816,
heapUsed: 650472,
external: 49879,
arrayBuffers: 9386
}
Вот некоторые сведения о каждом свойстве.
rss
- (Resident Set Size) Объем места, занимаемого на основном запоминающем устройстве.heapTotal
- Общий объем памяти в движке V8.heapUsed
- Объем памяти, используемый двигателем V8.external
— Использование памяти объектами C++, привязанными к объектам JavaScript (управляется V8).arrayBuffers
— память, выделенная для ArrayBuffer
s и Buffer
s.Для вашего вопроса вам может понадобиться использовать heapTotal
и heapUsed
. В зависимости от значения вы можете закрыть службу. Например:
const process = require("process");
const mem = process.memoryUsage();
const MAX_SIZE = 50; // Change me!
if ((mem.heapUsed / 1000000) >= MAX_SIZE) {
videoTranscoder.kill(); // You get the idea...
}
Деление на одну миллионную часть просто преобразует байты в мегабайты (B в МБ).
Change the code to what you like - this is just an example.
Это будет трудно сделать точно. Лучше всего измерить, сколько памяти потребляет ваш процесс, выполнив некоторые системные вызовы ОС.