Назад | Перейти на главную страницу

Оптимизация Apache для больших одновременных запросов и статических файлов

Хорошо, я знаю, что задаю вопрос, который задавали несколько раз раньше (например, здесь - Обслуживать миллионы одновременных подключений и статических файлов?) но, похоже, нет конкретных решений, поэтому я хотел бы спросить еще раз; пожалуйста, проявите ко мне терпение.

Мы мог используйте для этого nginx, но мы используем Apache по многим причинам (например, знакомство с Apache, согласованность стека, форматирование журнала и т. д.).

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

В частности, кажется, что Apache падает на ящик Amazon EC2 m1.medium (4 ГБ ОЗУ + 1 ядро ​​с 2 гиперпотоками), когда Apache видит около 100 одновременных (одновременных) запросов в секунду. (Сама коробка, похоже, сейчас обрабатывает больше подключений - netstat -n | grep: 80 | grep SYN | wc -l показывает 250+ соединений.)

Самая большая проблема заключается в том, что запросы на статический контент иногда выполняются за 5-10 секунд, что ухудшает работу наших конечных пользователей.

Мы не ОЗУ / память ограничена - работает бесплатно -m показывает следующее:

             total       used       free     shared    buffers    cached
Mem:          3754       1374       2380          0        139       332
-/+ buffers/cache:        902       2851
Swap:            0          0          0

Можем ли мы оптимизировать Apache дальше, чтобы он мог обрабатывать больше одновременных подключений и быстрее обслуживать статический контент? Было бы больше оперативной памяти или поддержки ЦП (даже если они, кажется, используются недостаточно).

Или может быть какая-то другая проблема, которую нам не хватает?

Наконец-то мы смогли решить эту проблему и снизить время отклика с нескольких секунд до нескольких миллисекунд, используя сам Apache.

Проблема была не в Apache; это была настройка MaxClients по умолчанию, которая вызывала проблему. Мы увеличили параметр MaxClients / ServerLimit, и Apache смог эффективно обрабатывать множество одновременных запросов и доставлять статические файлы с небольшим увеличением использования памяти. (Нам потребовалось время, чтобы обнаружить это, поскольку мы использовали ApacheBench для стресс-тестирования, которое не давало нам точного представления о том, что происходит.)

Мы по-прежнему используем MPM prefork, но, возможно, в будущем мы также рассмотрим MPM worker и event. Но пока мы вполне довольны производительностью MPM до форка.

Это хорошая справочная статья: MaxClients в apache. Как узнать размер моего процесса?