Каталог мониторинга изменений — потенциальный объем памяти

#memory #node.js #filesystems #directory

#память #node.js #файловые системы #каталог

Вопрос:

В настоящее время я использую скрипт в NodeJS для мониторинга каталога (и его подкаталогов) и выполнения некоторой функции после размещения туда файла. На самом деле это был бы FTP, куда пользователи загружают файлы, они обрабатываются, затем удаляются.

Очевидно, что я уже наблюдаю некоторое увеличение загрузки процессора скриптом, поскольку он перемещается по каталогам, ожидая, когда файлы станут видимыми. Но что меня беспокоит, так это то, что чем дольше выполняется скрипт, тем выше использование памяти (оно просто продолжает расти экспоненциально). Существуют ли какие-то упрощенные способы мониторинга каталога на предмет изменений?

Спасибо!

РЕДАКТИРОВАТЬ: в настоящее время я использую дерево наблюдения, которое отлично, но все еще имеет проблему с увеличением объема памяти.

Комментарии:

1. То, что вы идентифицируете, — это утечка памяти в стороннем коде. Попробуйте использовать supervisor , так меньше вероятность утечки памяти. (Это сделано Isaacs !!)

2. Звучит как отличная альтернатива! Как я могу отслеживать каталог (и подкаталоги) при добавлении файлов? Похоже, что Node-supervisor отслеживает изменения только в файле (server.js например)

3. он также отслеживает любые подкаталоги для всех .js файлов. Если вы попробуете, у supervisor --help него должна быть -js опция для более детального контроля.

4. Спасибо @Raynos, я начал его настраивать и использую следующую команду — supervisor -w Sites / data -e txt Sites/server.js — который, согласно документам, контролирует папку «Сайты / данные» для текстовых файлов. Мой вопрос в том, как мне получить доступ к этим изменениям? Я хочу иметь возможность передавать файлы, которые он получает, которые были изменены для обработки в моем server.js …

5. по умолчанию супервизор перезапускает ваш сервер при изменении файла. Это горячая перезагрузка. Нет progamatic API.

Ответ №1:

Звучит так, как будто вам нужна оболочка вокруг FAM или inotify. Возможно, вам подойдет что-то вроде node-inotify-plusplus.

Комментарии:

1. Спасибо @rjp, с тех пор я изучал что-то подобное. Моя главная проблема с любым решением — это уровень памяти, который будет занимать процесс мониторинга, поскольку эта система должна быть подключена к Сети в течение 8 часов одновременно. Является ли inotify хорошим вариантом? Из того, что я исследовал, это отдельно от ОС, поэтому было бы очень эффективно использовать память…

2. Пользователям FreeBSD / OS X потребуется использовать решение kqueue, поскольку inotify / epoll не существует на этих платформах.

3. Можете ли вы использовать node-inotify-plusplus для печати имен файлов по мере изменения файлов в каталоге?

4. Кроме того, доступны ли какие-либо рабочие примеры программ (с использованием node-inotify)? Я думаю, нам нужны несколько конкретных примеров решения этой проблемы (и документация для node-inotify довольно запутанная, поэтому некоторые примеры были бы полезны здесь.)

5. @rjp можете ли вы рассказать мне, чем он отличается от fs.watch в официальном api узла?