Показать сообщение отдельно
Старый 09.03.2008, 22:57 Вверх   #2
Коварный тип
 
Аватар для Serberg
Serberg вне форума
Доп. информация
Лампочка

Немного резюмирую информацию по apache и php, т.к. производительность httpd сильно зависит от настроек подгружаемых модулей/расширений, главное из которых - php.

Информация имеет отношение только к относительно мало/средне загруженным проектам, прошу не отвечать с критическими стрелами в разрезе кластеров/распараллелов нагрузки и т.п.

Если система не FreeBSD, обязательно проверить (во фрях по умолчанию) php.ini, раздел [MySQL], должно быть:

mysql.allow_persistent = On
mysql.max_persistent = -1 (не ограничено)
mysql.max_links = -1 (не ограничено)

В любом случае, последить за логами httpd и возможно увеличить следующие значения:

max_execution_time
max_input_time
memory_limit

Опять же, нужен баланс, т.е. задирать memory_limit сильно нельзя.

Проверим конфиг vb config.php

используем pg_pconnect() вместо pg_connect(), $config['MasterServer']['usepconnect'] = 1;

Далее, непосредственно apache, и его конфиг httpd.conf

На каждое обращение apache стартует процесс, который занимает память и камень.

Суть настройки проста: нужно иметь запас запущенных серверов, не давая им (процессам) плодиться слишком часто и много, вовремя убирая лишние.

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

MaxClients можно ставить исходя из реальных показателей одновременного пребывания на сайте + накидка на случай незапланированной спам акции. К примеру, если vb показывает 300 человек онлайн при тайм-ауте для cookies 600-900 секунд, то MaxClients можно ставить ~ 150-200, максимум 250. Лишние процессы будут мешать.

Timeout определяет время ожидания действия клиента. Вот удачное пояснение: обрывы связи иногда случаются и если браузер обратился к серверу, не получил ответа и послал повторный запрос (скажем, пользователь нажал reload), то у вас запустятся два процесса, причем один из них будет просто висеть и в течение указанного времени ждать, когда посетитель подтвердит свое желание посмотреть страничку.

По умолчанию этот параметр установлен в 300 секунд, его можно и нужно снизить до 30, в интранете с хорошими каналами до 15-20.

KeepAlive это нечто похожее на pconnect, используется существующее соединение при отправке данных клиенту без создания нового процесса. Сейчас включенный KeepAlive обязателен (экстрим apache рассматриваем не сейчас).

KeepAlive имеет свой timeout, назначение которого описано выше. Значение должно быть немного меньше, чем у общего Timeout, т.к. процесс KeepAlive сугубо направлен одному клиенту, и задержки могут дорогого стоить. Я ставлю 20, интранет 7-10.

Если запросов в рамках одного KeepAlive слишком много, apache может сильно тормозить. Для этого есть MaxKeepAliveRequests и MaxRequestsPerChild. Первый параметр отвечает за принудительное закрытие процесса после обработки указанного числа KeepAlive запросов, а второй - после указанного числа обычных запросов. MaxKeepAliveRequests лучше не жалеть, начать можно с 200 и смотреть за top.


StartServers MinSpareServers MaxSpareServers.

Запускаем при старте сервера указанное число apache, определяем минимальное и максимальное их число. К примеру: 25, 5 и 10. При указанных значениях критических отклонениях не будет, но если ставить слишком не/большие значения, производительность может резко упасть, особенно, если по каким-то причинам неадекватно отрабатывает KeepAlive.


Результаты изменений отслеживаем с помощью top и netstat. В период отладки включаем LogLevel debug и выгружаем все ненужные модули и расширения apache.

Многое зависит от версии php и типа его сборки.
Многое зависит от версии apache и типа его сборки. Не нужно собирать apache13+ipv6 или apache13-modssl или их комбинацию, если реально нет необходимости. Не нужно переходить на apache2х если функциональность 13 вас устраивает.

Автор статьи: intolerance
  Ответить с цитированием
6 пользователя(ей) сказали cпасибо:
 
Время генерации страницы 0.04877 секунды с 10 запросами