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

В APC + PHP, сколько оперативной памяти слишком много? Можно ли установить apc.shm_size на несколько ГБ?

На нашем сервере у нас МНОГО ОЗУ для наших уровней трафика (16 ГБ). Процессы HTTP регулярно съедают весь ЦП, и их необходимо перезапускать, даже не приближаясь к использованию памяти подкачки, поэтому я ищу способы потратить оперативную память, чтобы облегчить нагрузку на Apache (и / или помочь отдельному серверу MySQL, который может быть взлом Apache).

У меня много установок WordPress на экземпляре HTTPD, поэтому APC иногда использует до 900 МБ оперативной памяти (согласно диаграммам apc.php). На всякий случай у меня есть apc.shm_size установлен на 1600 МБ, что больше, чем нужно, но не больше, чем я могу сэкономить. Это означает, что для APC обычно доступно много дополнительной оперативной памяти, но при этом очень мало оборачиваемости, а фрагментация никогда не превышает 1%.

Это опасно? Должен ли я из принципа уменьшить размер APC до менее 1 ГБ? Стоит ли ожидать какой-то текучести кадров внутри APC во имя сокращения ее общей площади?

Так много памяти, выделенной для APC, означает, что в top / htop каждый процесс httpd показывает ~ 1,9 ГБ в столбце памяти VIRT. Очевидно, что это разделяемая память и не используется для каждого процесса, но может ли это повредить нашему серверу?

ПРИМЕЧАНИЕ. Проблема с сервером остается неясной, но эффект заключается в том, что примерно 60 раз в день все 8 процессоров заполняются до 100%, и все перестает работать, пока Monit не обнаружит, что Apache сломан, и перезапустит его (Monin также сохраняет сервер MySQL). Не уверен, является ли APC частью проблемы, но на всякий случай стараюсь все оптимизировать.

Распределение такого количества ресурсов обычно является чрезмерным. В этом случае вам может показаться, что это необходимо из-за множества разных файлов. Что может быть более полезным, так это уменьшить количество файлов, которые необходимо кэшировать, путем слияния установок Wordpress. В любом случае, если APC никогда не достигает 1000 МБ, использование большего количества избыточно.

Количество устанавливаемых MaxClients зависит от загруженности сервера и, в частности, от размера резидентной части Apache и других программ. С 16 ГБ оперативной памяти, даже если, скажем, половина ее выделена для Mysql (буферный пул InnoDB - InnoDB контролирует член лучше, чем MyIsam, даже за счет дополнительной оперативной памяти), пары сотен процессов Apache обычно вполне достаточно (я был обслуживает 10 миллионов обращений PHP на сервер в день, и в среднем одновременно используется ~ 40 процессов).

Наличие статических изображений, css, JS и т. Д., Обслуживаемых NginX, расположенных перед сервером Apache (или по отдельному URL-адресу), также уменьшит объем работы, которую требуется выполнять более тяжелому серверу с поддержкой PHP - часто очень существенно. http://blogs.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/ есть некоторые мысли по этому поводу, и есть другие блоги и подобные, которые проведут вас через установку Nginx перед Apache, с участием Wordpress или без него.

Наконец, KeepAlives в основном просто убивает загруженный сайт. Отключить их рекомендуется сейчас, чтобы избежать дефицита ресурсов, который вы наблюдаете регулярно. Если, например, вы установили 100 MaxClients и 30 секунд KeepAlive, то всего 100 посетителей в течение 30 секунд будут держать открытыми все слоты Apache, и вы не сможете обслуживать что-либо еще. KeepAlive Off.

Я не думаю, что выделение такого количества памяти является проблемой, если она доступна и больше нигде не нужна. Одна вещь, которую вы могли бы сделать, - это лучше использовать APC - это использовать кеш объектов WordPress, например W3 Общий кэш или Марка Джаквита Плагин APC Object Cache.

Для вашей проблемы с процессором я бы посмотрел на ваши MaxClients и MaxRequestsPerChild. Их можно было поставить слишком высоко. Также посмотрите на настройку KeepAliveTimeout и убедитесь, что она не слишком высокая.

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

Чтобы уменьшить нагрузку на процессор, вы можете настроить срок действия ресурсов (css, js, images). Установите mod_expire на apache и используйте .htaccess, чтобы определить заголовок срока действия по мере необходимости. Если вы этого не сделаете. Браузеры проверяют, изменились ли файлы, даже если они есть в кеше. Это генерирует много обращений и истощает циклы процессора.

Было бы неплохо также использовать les instance of wordpress.

Но лучше всего было бы проверить, как кодируется сайт wordpress. Плагины требуют много энергии. Иногда пользователи устанавливают их для глупых вещей, таких как включение кода Google Analytics в нижний колонтитул, тогда как его можно встроить в файл шаблона footer.php.