Здравствуйте,
Такая проблема: при большом наплыве пользователей - бэкенд (апач)
форкает макс. (разумное) число процессов, ну и accept апач не делает,
пока не освободится к.л. процесс. В результате накапливается очередь
соединений без аксепта, и как следствие - долгий ответ бэкенда и
потеря соединений по таймауту.
Как лучше всего решить данную проблему?
Есть одна идея:
поставить perl_set $limit_rate ...
и перловый модуль будет периодически проверять длину очереди
соединений без аксепта и понижать $limit_rate при надобности.
Возможно, есть лучший вариант?
Заранее спасибо.
займитесь репрофайлингом системы - ищите узкие места на бэкенде(запросы в базу и
тп)и оптимизируйте их. Вводите в схему кэширование на всех возможных
этапах(eAccelerator, proxy_store у nginx, может ещё что-то). Если приемлемо -
откажитесь от апача вообще в пользу php-fpm. Надеюсь, апач занимается только
динамикой сейчас? Посмотрите на расширенный статус апача и профайлите наиболее
частый&долгий запрос. Если не поможет и архитектура системы позволит
балансировку - ставьте рядом второй сервер с апачем.