На этот вопрос уже есть ответ:
Я вехожу сайт в качестве услуги для плавательного сообщества средней школы штата. Я делаю это из любви к спорту, поэтому я не могу потратить смехотворную сумму на хостинг и т. Д. И мне это не нужно - за исключением одного дня в году.
Тренеры все отправляют свои региональные заявки через мой сайт, и в типичной манере все ждут до установленной даты, чтобы сделать это. Это было вчера, и мой сайт, который никогда не падал за весь сезон, останавливался до неотзывчивого останова, по крайней мере, 4 раза в течение дня. Он никогда не исчезал более часа, и он всегда возвращался. (Я выдал перезапуск apache, чтобы быть уверенным).
Мой вопрос: как я могу настроить Apache, чтобы справиться с однодневным всплеском пользователей? Нет смысла платить за большее количество оборудования в течение целого года, когда мне нужно только один день повышения производительности. Я пробовал читать о префорке.c и рабочем.c но я просто не понимаю этого достаточно хорошо. Вот моя текущая конфигурация:
<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 10
MaxClients 10
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 1
MaxClients 10
MinSpareThreads 1
MaxSpareThreads 4
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Наибольшее количество пользователей, которых я когда-либо ожидал сразу, было бы 400. Вероятно, гораздо меньше, чем это. Вчера у меня было всего около 70, и это не очень хорошо. Есть предложения?
ОБНОВЛЕНИЕ:
728 root 20 0 317m 20m 7752 S 0.0 2.7 0:49.58 httpd
19700 webuser 20 0 489m 37m 6792 S 0.0 4.9 0:00.72 httpd
19737 webuser 20 0 493m 42m 6624 S 0.0 5.5 0:00.59 httpd
19756 webuser 20 0 494m 43m 6604 S 0.0 5.7 0:00.58 httpd
19758 webuser 20 0 495m 44m 6780 S 0.0 5.8 0:00.97 httpd
19777 webuser 20 0 493m 42m 6620 S 0.0 5.5 0:01.08 httpd
Взглянул на ресурсы, и я не уверен, на что я смотрю. Процесс, принадлежащий root, должен быть тем, который запускает Apache. Являются ли те, что принадлежат webuser, порожденными самим Apache? Почему они так большие? Сервер имеет около 3/4G оперативной памяти, если я рисую 1/2 для Apache, а процессы вмещают 40M, как я могу оценить количество одновременных пользователей?
Я попытаюсь набросать некоторые общие правила, учитывая, что вы предоставили очень мало деталей о своей среде:
прежде всего проверьте, какой модуль mpm использует ваш Apache, чтобы вы ' Я буду знать, какой из двух блоков конфигурации, которые вы опубликовали, нужно настроить:
apachectl -D DUMP_MODULES | egrep -i "prefork | worker"
Если вы находитесь в режиме prefork и запускаете какое-то php-приложение через mod_php
, причина того, что ваши процессы Apache со временем становятся огромными, заключается в другом. и больше php-кода и данных, загружаемых модулем в оперативную память каждый раз, когда приложение получает новые запросы от клиентов. Чтобы уменьшить размер процессов, попробуйте уменьшить MaxRequestsPerChild
примерно до 500. Каждый процесс будет завершен после обработки запросов MaxRequestsPerChild
, и будет запущен новый (который будем надеяться, что объем памяти будет меньше). Это происходит за счет снижения производительности, поскольку новые процессы будут создаваться повторно чаще, но поскольку вы пытаетесь поддерживать работу службы, а не делать ее молниеносной, это должно быть приемлемым компромиссом.
Вы не хотите, чтобы ваш веб-сервер менял местами: убедитесь, что максимальное потребление ОЗУ для каждого времени процесса Apache ServerLimit
или MaxClients
никогда не превышает 75% доступной памяти сервера.
Если вы можете, перейдите на AWS или другого поставщика облачных услуг: AWS может автоматически увеличивать и уменьшать масштаб вашего сервера по заранее определенному расписанию. «Автомасштабирование» - это облачная змеиная нефть в 90% реальных сценариев, но ваш случай, возможно, один из немногих, которым эта функция действительно может принести пользу. Вы не должны упускать возможность.
Если вы сталкиваетесь с подобными проблемами при обслуживании 70 клиентов на сервере с 4 ГБ ОЗУ, я подозреваю, что что-то не так под капотом, но, опять же, вы предоставили недостаточно подробности, чтобы сделать что угодно, кроме обоснованного предположения