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

Настройка производительности конфигурации Apache

Я только что купил свой первый VPS с 2 ГБ оперативной памяти. Я установил Apache + mySQL и 1 в основном статический сайт и 2 сайта wordpress (для тестирования). Сначала у меня был пик памяти на уровне 1 ГБ, что указывает на необходимость дальнейшей настройки.

Here is the result for running ps -ylC httpd --sort:rss
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0 20729     1  0  80   0 10032 69902 poll_s ?        00:00:00 httpd
S    48 20770 20729  0  80   0 22768 73372 inet_c ?        00:00:00 httpd
S    48 20735 20729  0  80   0 24020 73897 inet_c ?        00:00:00 httpd
S    48 20740 20729  0  80   0 26524 74302 inet_c ?        00:00:00 httpd
S    48 20733 20729  0  80   0 27792 74831 inet_c ?        00:00:00 httpd

Вот результат использования команды top

top - 15:42:01 up 18 days, 15:45,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  26 total,   1 running,  24 sleeping,   0 stopped,   1 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2097152k total,   837604k used,  1259548k free,        0k buffers
Swap:  4194304k total,    15836k used,  4178468k free,   679184k cached
    1 root      20   0 19208  416  292 S  0.0  0.0   0:00.01 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd/179
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper/179
  491 root      20   0 80300  776  468 S  0.0  0.0   0:18.75 sendmail
  540 smmsp     20   0 76024  388  260 S  0.0  0.0   0:00.08 sendmail
  556 root      20   0  114m  368  284 S  0.0  0.0   0:02.47 crond
  726 root      16  -4 10660    8    4 S  0.0  0.0   0:00.00 udevd
  876 root      20   0 64272    8    4 S  0.0  0.0   0:00.00 saslauthd
  877 root      20   0 64272    8    4 S  0.0  0.0   0:00.00 saslauthd
  908 root      20   0  181m  864  416 S  0.0  0.0   0:00.04 rsyslogd
  928 root      20   0 22092    8    4 S  0.0  0.0   0:00.00 xinetd
 2100 root      20   0  105m 1180 1176 S  0.0  0.1   0:00.00 mysqld_safe
 2189 mysql     20   0  679m  19m 3888 S  0.0  0.9   0:41.22 mysqld
18759 root      20   0 94084 4772 3420 S  0.0  0.2   0:01.03 sshd
18761 root      20   0  105m 1952 1488 S  0.0  0.1   0:00.16 bash
20729 root      20   0  273m 9.8m 5124 S  0.0  0.5   0:00.04 httpd
20733 apache    20   0  292m  27m 4804 S  0.0  1.3   0:00.54 httpd

Вот изменения, которые я внес в httpd.conf

# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 15

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5

Вот моя настройка prefork-MPM

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       2
MinSpareServers    3
MaxSpareServers    3
ServerLimit      35
MaxClients       35

Изначально я хотел, чтобы здесь был только MongoDB. Но я также планирую переместить свои установки WP с общего хостинга. В общем, у меня будет 2-5 WP-сайта, 1 веб-приложение CodeIgniter (без БД), 2 будущих веб-приложения на fuelphp под управлением MongoDB.

Я предпочитаю, чтобы размер оперативной памяти не превышал 1,2 ГБ, если это возможно. Есть предложения по дальнейшей настройке на стороне apache? Я посмотрю, смогу ли я уменьшить объем mysql.

«Как мне заставить мой сайт работать быстрее» - действительно слишком сложный вопрос, чтобы ответить на него на этом форуме. Однако следует отметить несколько моментов:

  • да, использование памяти очень велико, даже для Wordpress
  • какая разница? Если вы не знаете, что это влияет на производительность, зачем беспокоиться об этом?
  • установка minSpareServers на то же значение, что и maxSpareServers, не является хорошим способом справиться с изменением профилей спроса - Apache ограничивает скорость, с которой запускаются новые серверы, я бы рекомендовал изменить maxSpareServers на 5
  • KeepAliveTimeout 5 - вы это изменили? Обычно это по-прежнему значение по умолчанию - и значение по умолчанию слишком велико, если вы не знаете, что делаете МНОГО вещей Ajax / COMET на мобильных соединениях - рекомендую 2
  • Рассмотрите возможность добавления обратного прокси, такого как nginx или varnish
  • Используйте плагины общего кеширования ESI или W3 для установки Wordpress (для ESI требуется обратный прокси-сервер с поддержкой ESI, такой как Varnish или ATS)
  • вы не сообщили подробностей о том, как настроен MySQL. Если вы используете innodb, размер буферного пула должен быть таким, чтобы он занимал значительную часть памяти (т.е. вы должны стремиться УМЕНЬШИТЬ количество свободной памяти в системе). Если это MyISAM, вам нужно оставить много свободной памяти для VFS.
  • Вы должны НАЧАТЬ любое упражнение по настройке памяти, убрав из Apache то, что вам не нужно.
  • Вы не говорите, как настраивается / вызывается PHP. В идеале это должен быть mod_php и кеш кода операции.
  • Я бы не рекомендовал переключаться на другой веб-сервер, если у вас нет много больше трафика, чем 35 одновременных подключений

Я только что перешел на Nginx после нескольких тестов. Производительность сейчас намного лучше (микро-инстанс Amazon EC2 с 613 МБ +, выполняющий несколько уровней на Java).

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

1-й Поднимите MaxKeepAliveRequests. Малое количество MaxKeepAliveRequests приводит к перезапуску дочернего apache2 каждый раз, когда достигается MaxKeepAliveRequests.

2-й Отключите неиспользуемые модули apache, такие как ldap auth (если вам это не нужно)