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

Apache потребляет слишком много ЦП и памяти

У меня возникли проблемы с загрузкой ЦП памяти с помощью веб-сервера Apache.

Мы ведем Сервер Ubuntu 12.04 LTS на виртуальной машине. Наш сервер имеет следующие характеристики:

Мы настроили сервер для запуска Сайт на основе Drupal (7.23). Итак, мы установили Apache, PHP, MySQL ... Версии ниже:

Я бегаю модули apache слишком. Взглянуть (apachectl -M):

На apache2.conf, у нас такой конфиг:

    Timeout 90
    KeepAlive On
    MaxKeepAliveRequests 80
    KeepAliveTimeout 5
    HostnameLookups Off
    LogLevel warn

    <IfModule mpm_prefork_module>
        StartServers          10
        MinSpareServers       10
        MaxSpareServers       30
        MaxClients           120
        MaxRequestsPerChild 1000
    </IfModule>

В Виртуальный хост моего сайта:

    <VirtualHost *:80>
        ServerName blabla.bla.bla
        ServerAdmin bla@bla.com
        DocumentRoot /l/disk0/site/public_html

        <Directory />
            AllowOverride None
        </Directory>

        <Directory /l/disk0/site/public_html>
            Options MultiViews Indexes Includes FollowSymLinks ExecCGI
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>

        LogLevel warn
        ErrorLog "/l/disk0/site/logs/apache/site/error.log"
        CustomLog "/l/disk0/site/logs/apache/sit/access.log" combined
        SSLProxyEngine on
        RewriteEngine   on
        RewriteLog     logs/rewrite_www_log
        RewriteLogLevel        0

        Include rewrites-www.conf
</VirtualHost>

Модули Drupal:

Мой сайт прост и не имеет большого количества посетителей. Я говорю о 500 посетителях в день. Drupal может вызвать такую ​​большую загрузку процессора? Или модуль?

Другая проблема - использование памяти. При создании процесса для apache2 выделяется 80 МБ. Думаю, это уже перебор.

Моя проблема в том, что у процессора (всех ядер) высокая нагрузка. В большинстве случаев при нагрузке от 90% до 100%! Оскорбительный процесс - это apache2. Память тоже расходуется без жалости. Из 8 ГБ потребляемая память составляет около От 6,5 до 7,5 ГБ. Я не знаю, неверна ли моя конфигурация apache или мне действительно нужно больше оборудования (думаю, нет). Drupal может вызвать высокую загрузку процессора?

Когда загрузка процессора достигает 100%, сайт отключается, и нам приходится перезапускать apache. Я нашел обходное решение с помощью Drupal, используя APC и установив Boost. имел некоторую эффективность, но загрузка процессора оставалась высокой. Очень высоко.

Если вам нужна дополнительная информация, например о модулях Drupal и расширениях PHP. Пожалуйста, дайте мне знать.

Другая проблема - использование памяти. При создании процесса для apache2 выделяется 80 МБ. Думаю, это уже перебор.

Это реальная или виртуальная память? Честно говоря, не очень; Более того, вы должны сосредоточиться на исправлении вещей, которые вызывают проблемы, а не только на том, что, по вашему мнению, должно быть другим.

Если вы хотите, чтобы процессы Apache занимали меньше памяти, вам следует отключить модули (поскольку каждый из них - это больше кода, который должен находиться в памяти). Но если вам нужны все включенные модули, ну что ж.

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

Но гораздо проще изменить

MaxClients           120

на что-то более разумное для вашей рабочей нагрузки:

Если учесть обращения перезаписи и основной трафик сайта, у нас будет около 70 запросов в минуту. Сейчас у нас 33 входящих соединения.

Я вернусь к этому на мгновение, но если вы имеете дело только с 33 параллельными запросами, вам не нужно 120 рабочих мест!

MaxClients           40

И вам, вероятно, следует отключиться MinSpareServers и MaxSpareServer примерно до 5 и 10 соответственно. Нет необходимости, чтобы 30 рабочих сидели и ничего не делали.

Теперь вернемся к

Если учесть обращения перезаписи и основной трафик сайта, у нас около 70 запросов в минуту. Сейчас у нас 33 входящих соединения.

Если у вас 33 одновременных запроса, но вы выполняете только 70 в минуту, есть несколько возможностей:

  1. Обработка каждого запроса занимает около 30 секунд!
  2. Ваша частота запросов не очень стабильна, и большую часть минуты вы ничего не делаете.

Если дело №1, я действительно не знаю, как помочь - что-то невероятно неправильно, так неправильно, я даже не знаю, где тебе начать искать.

Если это номер 2, я предполагаю, что вы обслуживаете все свои статические ресурсы (изображения, js, css, шрифты) со своего сервера. Лучше всего разместить их на CDN, но если вы действительно не можете этого сделать, вы можете установить для них сверхдлительное время кеширования и снова включить Varnish. Если вы используете процессы Apache с PHP и множеством других вещей только для обслуживания статических файлов, вы тратите ресурсы впустую - сделайте это чем-нибудь попроще!

Моя проблема в том, что у процессора (всех ядер) высокая нагрузка. В большинстве случаев при нагрузке от 90% до 100%! Оскорбительный процесс - это apache2.

Это постоянное число или только при обслуживании запросов?

Как выглядит дисковый ввод-вывод (iostat -mhx 2)? Что делает MySQL (show processlist;)?


Ваш сервер значительно превосходит то, что вы описали. Это хорошие новости, потому что это означает, что вы сможете решить эту проблему.

Я столкнулся с той же проблемой. Загрузите свой веб-контент на локальный компьютер и просканируйте его с помощью обновленного антивируса. В моем случае виноват троянский вирус. После удаления вируса в моем веб-контенте моя проблема была решена.