Я установил Apache 2.2, и он работает как шарм. Проблема в том, что эта система иногда замедляется при высокой загрузке или когда большое количество одновременных пользователей обращаются к одному и тому же файлу php.
Просматривая журналы производительности сервера в Splunk, я заметил, что Apache очень эффективно использует ЦП и создает отдельные ступени каждый раз, когда происходит всплеск, и очень смело справляется с потреблением ЦП.
Тем не менее, у этого конкретного сервера больше доступной памяти, чем мощности процессора, и я хотел бы знать, есть ли способ заставить Apache больше полагаться на оперативную память, чем на процессор, при обработке различных задач. На данный момент это кажется лучшим вариантом для увеличения производительности Apache в конкретной настройке.
Наш сервер имеет 4 ядра ЦП (2,2 ГГц) каждое и 8 ГБ ОЗУ.
Когда происходит загрузка, мы обычно видим, что используется только 700 МБ ОЗУ, но 80-90% всего ЦП потребляет Apache. Логично ли предположить, что, увеличив «лимит» памяти, который обрабатывает Apache, мы могли бы увеличить пользовательский лимит?
Какие шаги нужно сделать, чтобы Apache работал таким образом?
Посмотрите на использование apache mod_expires и deflate.
У вас установлен кеш кода операции PHP? например php-apc или xcache?
обычные рекомендации:
создавать отдельные ступени каждый раз, когда происходит скачок [cpu]
Значит, это поточный сервер, а не предварительный форк?
Как вы думаете, скачки могут быть следствием появления большего количества процессов? Если это так, то я бы рекомендовал запускать больше процессов (но с таким же количеством потоков). Также убедитесь, что у вас высокое значение (не 0) для maxrequestsperchild.
Конечно, вы хотите убедиться, что у вас работает больше неактивных httpd. Как вы это сделаете, зависит от того, является ли это предварительным форком или многопоточным apache.
Было бы полезно, если бы вы предоставили свои текущие основные настройки вместе с подробностями о том, как вы настроили PHP и на какой ОС он работает.
Как говорили другие, включение сжатия. mod_deflate будет работать только со статическим содержимым - для PHP вам нужно добавить zlib.output_compression = On в ваш ini файл. В то время как тривиальный анализ показывает, что это увеличивает объем работы, выполняемой ЦП, на практике это означает, что сервер освобождается от работы (и поэтому планируется реже).
Для предпочтения php должен работать как mod_php, в противном случае через fastCGI - если он работает как CGI, чего вы ожидаете? Опять же, поможет кеш-код операции.