Nano Hash - криптовалюты, майнинг, программирование

sidekiq - Является ли параллелизм › 50 стабильным?

Sidekiq документация говорит:

Не устанавливайте параллелизм выше 50. Например, я видел проблемы со стабильностью при параллелизме 100.

Что ж, мое низкое потребление памяти позволяет мне использовать параллелизм 350 потоков на одном 512 МБ X1 heroku dyno. И я хотел бы использовать ~ 300, потому что все задания требуют интенсивного ввода-вывода (http-запросы).

Интересно, с какими проблемами я могу столкнуться?

Я пытался отслеживать журналы при перегрузке с 80 и не видел проблем.

Каких проблем следует ожидать при настройке параллелизма 300 потоков? Буду ли я рисковать тем, что задания будут прекращены без перемещения в «мертвую» очередь? ИЛИ просто прекращение работы рабочих, которые я смогу наблюдать. Безопасно ли устанавливать параллелизм 300 или 100?

Владелец sidekiq не знает ответа, и вот проблема, которую я открыл.

ОБНОВЛЕНИЕ: при высокой нагрузке, когда я увеличился с 80 до 100, я начал получать ошибки «не могу создать поток: ресурс временно недоступен» здесь и там, в крайних случаях 180 потоков он когда-нибудь завершит весь процесс sidekiq.

Потребление памяти всегда составляло от 140 МБ до 240 МБ в соответствии с показателями Heroku.

Я использовал сигнал TTIN, как описано здесь

И обнаружил, что большинство потоков ожидают этих строк кода:

app[worker.1]: 3 TID-ow5z46exw WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/monitor.rb:187:in `lock'

app[worker.1]: 3 TID-os9ulw8ps WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:880:in `initialize'

app[worker.1]: 3 TID-os9ulw8ps WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/timeout.rb:95:in `join'

app[worker.1]: 3 TID-osjnd6zac WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/protocol.rb:158:in `wait_readable'

Все задокументировано в issue на github.

Владелец sidekiq говорит, что трассировки выглядят нормально, поэтому не удалось определить основную причину проблемы со стабильностью, но есть данные о том, сколько потоков вызывает это и каковы симптомы.

28.10.2016

Ответы:


1

В зависимости от количества параллелизма размер пула БД должен быть увеличен. параллелизм (поток) + 2 = размер пула соединений с БД (300+2) = 302 соединения с БД

Реальный параллелизм для одного процесса sidekiq зависит от количества ядер процессора и других параметров. Таким образом, использование большего количества валюты займет большую часть времени при переключении контекста потока вместо реального ввода-вывода/вычисления.

512 МБ X1 Heroku Dyno

Обычному приложению rails потребуется не менее 200 МБ памяти при запуске, и если каждый поток занимает (приблизительно) 1 МБ памяти, то общее потребление памяти будет

200 + (300 *1) = 500 MB

Если какому-то потоку требуется больше памяти во время вычислений (т. е. выборка большего количества ActiveRecords, чтение большого файла и т. д.), то весь sidekiq рухнет.

Когда я запускал sidekiq с полным потенциалом машины, сборка мусора не происходит сразу, что приводило к увеличению памяти и частым сбоям sidekiq.

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

29.10.2016
  • Сивалингам - все верно и надежно, кстати, я избегаю использования рельсов, когда это возможно, и использую простой рубин, чтобы уменьшить потребление памяти, это позволило мне использовать потоки пумы 2X34. И гораздо больше, чем 300 в sidekiq. Но все, что вы здесь сказали, — это ограничения ресурсов и проблемы с производительностью, которые легко отслеживать и настраивать. Владелец sidekiq говорит о проблемах со стабильностью, я ищу эти проблемы со стабильностью. Недостаточно памяти и подключения, посылает вам четкое сообщение. 30.10.2016
  • Хорошо, после увеличения количества потоков до 160 максимальный объем памяти составляет всего 150 МБ в течение 24 часов. Но я получил эту ошибку «не могу создать поток: ресурс временно недоступен», который утверждал здесь (github .com/mperham/sidekiq/issues/286) из-за утечки потока, которую следует отслеживать с помощью этого github.com/mperham/sidekiq/wiki/Signals#ttin. Буду следить и обновлять пост. 30.10.2016

  • 2

    Что ж, проблемы со стабильностью sidekiq при высоком уровне параллелизма заключаются в следующем.

    Когда вы устанавливаете параллелизм выше 80 (или 50), вы можете столкнуться с этой ошибкой «невозможно создать поток: ресурс временно недоступен:»

    Некоторые задания возвращаются обратно в очередь, иногда весь процесс прерывается, а задания теряются, если только вы не используете функция надежности sidekiq pro

    Похоже, мы достигаем максимального ограничения heroku в 256 потоков, хотя sidekiq настроен на используйте 80 потоков. Это не поможет, если я использую несколько процессов sidekiq внутри одного heroku dyno, когда я это сделал, я все равно столкнулся с этим ограничением.

    Похоже на утечку потока, и это следующее, что нужно исследовать.

    Вышеупомянутое произойдет также, когда потребление памяти останется низким (‹ 240 МБ в моем примере).

    Все обновляется в выпуске github

    01.11.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..