2016-09-07 8 views
2

Я планирую иметь приложение Rails, которое имеет богатую контентную интерактивную страницу, к которой будут подключаться многие пользователи.Могут ли проблемы производительности возникать при использовании ActionCable в Production?

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

Проблемы начались, когда мы начали альфа-тестирование с выбранными группами людей. Север внезапно остановился. Nginx остановится из-за того, что очередь заполнена. Я некоторое время проигрывал, но, оглянувшись, пришел к выводу, что live actioncable полностью поглощает мою память. Это особенно плохо, когда пользователь повторно загружает страницу несколько раз, что подписывается на actioncable, вызывая дополнительный процесс для становятся активными, полностью останавливая сервер, только вылечившись перезагрузкой nginx.

В настоящее время я запускаю 2-гигабайтный SSD-сервер с памятью 1 ГБ для тестирования альфа-версии, возможно, на вершинах 20 одновременных пользователей. Должен ли я сталкиваться с проблемами производительности при такой нагрузке? или должен настроить код или redis, пассажир исправить это?

Я знаю, что трудно сказать какие-либо окончательные вещи без особых подробностей, но можно ли оценить приблизительную оценку информации?

ответ

0

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

location /special_websocket_endpoint { 
     passenger_app_group_name foo_websocket; 
     passenger_force_max_concurrent_requests_per_process 0; 
    } 
более

информации здесь

https://www.phusionpassenger.com/library/config/nginx/tuning_sse_and_websockets/

1

20 одновременных пользователей плюс несколько вкладок на пользователя по-прежнему меньше, чем около 100 одновременных подключений к сети, это не так много.

Первое, что я искал, это утечки - когда по какой-либо причине соединение с веб-сайтом или другие ресурсы (открытые файлы и т. Д.) Не освобождается, когда фактический пользователь отключается. Убедитесь, что у вас запущены новые версии рельсов/пассажира, так как в рельсах произошла ошибка, вызывающая подобное поведение (см. https://blog.phusion.nl/2016/07/07/actioncable-under-stress-p1/).

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

+0

Спасибо за совет, я увидел, что статью тоже, и думала, что это может быть, но мой Rails (5.0.0.1) и Passenger (5.0.30) являются последними версиями. Похоже, что это происходит, когда кто-то быстро загружает страницу. Кроме того, в этом случае процессы разделения очень много. – Saifis

 Смежные вопросы

  • Нет связанных вопросов^_^