LINUX.ORG.RU

Как ограничить количество потоков NodeJS?

 , ,


0

1

Парсер на ноде падает из-за нехватки оперативной памяти. На сервере 1ГБ. На виртуалке на локалхосте - 3ГБ и работает стабильно.
Мне кажется, что если количество потоков ограничить - должно быть медленнее, но стабильнее.
Как это сделать? Или предложите другой выход. Выбрать более дорогую VPS - только в крайнем случае

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

у меня для тебя плохие новости

umren ★★★★★
()

в ноде один поток, а падает твой парсер скорей всего потому что реализован так, что сохраняет все данные и возможно работает постоянно(?), самый эффективный вариант переписать парсер на SAX.

umren ★★★★★
()
Ответ на: комментарий от umren

Я в смысле параллельности, он же сразу парсит все без остановки и параллельно кучу страниц. Вот эту кучу уменьшить можно? Очередь какую?

Qwentor ★★★★★
() автор топика
Ответ на: комментарий от Qwentor

значит засирается просто память из-за большого количества объектов, либо парсить кусками надо и чистить старое, либо на SAX, в зависимости от того что вы там парсите.

umren ★★★★★
()
Ответ на: комментарий от Qwentor

так все в ваших руках, ручной пулл реализуйте :)

umren ★★★★★
()
Ответ на: комментарий от umren

Чистить старое - это как? И что есть SAX? Относится к ноде или очередное другое?

Qwentor ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Cпс! Создал своп - все спарсило и не упало!
Надо потестить в непрерывном парсинга.

Qwentor ★★★★★
() автор топика

Вернитесь на php, дети мои, он необидчив, он простит измену и примет обратно с распростёртыми.

p.s. не знаю, что у тебя там за парсер и чего он парсит, но сдаётся мне, что с привычкой пихать всё в память надо что-то делать.

r_asian ★☆☆
()
Ответ на: комментарий от r_asian

Подскажи что делать с этой привычкой? А то я даже пути-дороги не знаю)
Куда пихать-то?
Пхп и питон пробовал - получалось медленно. На самом деле и ноду замедлить хотел только от безысходности. Но вроде своп помог и пока этого делать не буду. Если поможешь дельным советом - буду искренне премного благодарен

Qwentor ★★★★★
() автор топика
Ответ на: комментарий от umren

в ноде один поток, а падает твой парсер скорей всего потому что реализован так, что сохраняет все данные и возможно работает постоянно(?), самый эффективный вариант переписать парсер на SAX.

нода запускает потоки внутрях для эмуляции асинхронности, так что зависит от того какие модули используются. но врядли у ТСа проблема из-за этого.

waker ★★★★★
()

сделай heap dump, и посмотри что выжрало всю память. потом переделай код, чтобы не выжирал всю память.

здесь подробнейшая инструкция: https://github.com/bnoordhuis/node-heapdump

waker ★★★★★
()
Ответ на: комментарий от Qwentor

А то я даже пути-дороги не знаю)

В сторону конечных автоматов, например. В сторону пакетной обработки. Зависит от того, что парсишь.

Но вроде своп помог

До тех пор, пока то, что ты парсишь не возросло хотя бы вдвое

Если поможешь дельным советом - буду искренне премного благодарен

Ты бы хоть сказал что парсишь и чем.

r_asian ★☆☆
()
Ответ на: комментарий от Qwentor

модуль async не создает потоков. он просто позволяет более удобно писать асинхронный код. надо смотреть что именно ты дергаешь через него, и как.

если ты просто дергаешь в цикле 10000 асинхронных функций — это приведет как раз примерно к тому, что ты получаешь.

например, это может открыть 10000 соединений с базой, или 10000 file handles (одновременно).

дергай порциями по несколько штук. думаю, тот же async может помочь в этом.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от Qwentor

cheerio если я то нашел, то это дом.
попробуй xml-stream поточный парсинг xml.
Ну и конечно изучать профессию. Не важно какую, текущую, другую но точно изучать.

TBEPDb
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.