Пассажирские киоски с большим количеством одновременных запросов - PullRequest
1 голос
/ 17 октября 2010

У меня проблемы с одним из наших приложений Rails 3. Когда на сервер отправляется много запросов (10 / секунду), весь сервер останавливается. Я перепробовал множество различных настроек для пассажиров и иногда замечал небольшое улучшение, но ни одна из них не оказалась решением проблемы.

Моя настройка:

  • Intel i7 (8 ядер)
  • 8 ГБ оперативной памяти
  • Сервер Ubuntu 10.04
  • Рубин 1.9.2
  • Рельсы 3
  • Apache 2.2.14
  • Пассажир 2.2.15
  • MySQL 5.1.41

Мой текущий пассажир.конф:

PassengerMaxPoolSize 12
PassengerUseGlobalQueue на
PassengerHighPerformance на
RailsSpawnMethod smart
PassengerMaxRequests 5000
PassengerStatThrottleRate 5
RailsAppSpawnerIdleTime 0
PassengerPoolIdleTime 600

Этот сервер предназначен для одного приложения. Ну, одно приложение в режиме постановки и производства.

Я попытался поиграть с PassengerMaxPoolSize, установив его на 4, 12, 20, 40, 80, ... останавливаются остатки. Странно, что Passenger порождает больше приложений, чем определенный MaxPoolSize. В настоящее время он установлен на 12, но в htop я могу найти по крайней мере 34 из них:

1234 имя пользователя 20 0 260M 97572 3892 S 0.0 1.2 0: 00.13 Стойка: /var/www/domains/domain.com/current

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

У меня нет идей. У кого-нибудь есть идея, как это исправить?

Ответы [ 2 ]

1 голос
/ 17 октября 2010

Phusion Passenger, вероятно, пытается порождать больше процессов, но во время порождения не может отвечать на запросы.Попробуйте Phusion Passenger 3, который реализует асинхронное порождение.

0 голосов
/ 17 октября 2010

Проверьте ваш журнал rails, чтобы убедиться, что он не обслуживает статические запросы (файлы изображений, css, js и т. Д.).Если это так, то каждая загрузка страницы вызывает намного больше запросов через пассажира.

Если это так, вы можете настроить apache для отправки статических файлов сам, если они существуют, вместо того, чтобы пересылать все запросы пассажиру..

...