mannaro
@mannaro
Умею профессионально гуглить

Как побороть загрузку процессора на 100% в meteor?

Добрый день! Пилим мы приложение на meteor. Есть у нас функция генерации xls файла из нашей БД.
Процесс генерации разделен на 4 части:

  1. загрузка из БД документов;
  2. обработка документов для выгрузки;
  3. генерация файла;
  4. отдача файла юзеру;


На нескольких этапах столкнулись с проблемами. Итак, по очереди:
  1. почему-то при большом запросе (20к записей по 1кб каждая) почему-то очень напрягается процессор (и ест его именно meteor). Пока не смогли решить - повесил временный костыль через .rawCollection, там все ок.
  2. При обработке документов каждая итерация занимает порядка 30мс, итого 20к * 30 = 10 минут. В это время там бежит цикл по всем записям и преобразует их в нужный вид. В этот момент загрузка висит на 100% и управление в главный поток передается крайне редко (хотя в meteor используется fibers, и коды выполняется в отдельном волокне. Из этого делаю вывод - все очень странно). На данный момент висит костыль в виде setTimeout на 30мс каждые 10 записей. Это увеличивает скорость генерации, но по крайней мере снижает постоянную нагрузку на сервер и дает обработать запросы от других пользователей.
  3. Генерация файла выполняется сторонним пакетом и тоже нагружает систему, правда тут быстрее все работает (используем excel4node последней версии).
  4. Тут вроде все ок.

    Если кто поможет разобраться хотя-бы с одним из пунктов, буду очень благодарен.
  • Вопрос задан
  • 382 просмотра
Решения вопроса 1
mannaro
@mannaro Автор вопроса, куратор тега JavaScript
Умею профессионально гуглить
ответа так и нет :(

1. на жирные запросы поставили .rawCollection
2, 3 - вынесли на отдельный процесс генерацию xls файлов. Таким образом он не влияет на общий поток.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
Где код? Какая БД(видимо монго?)?

20мб не так уж много, но и не мало смотря что там с ними еще делается в процессе.
Ответ написан
@soulness
Пробовали разделять получение данных с использованием лимита и офсета. Сталкивался с подобной проблемой. на локальной машине при вставке около 10к записей, доходил до 3к максимум, а потом подвисал. тогда как на вдс, с легкостью вставлял 100к
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы