Оптимизация работы процессов форума IPB на уровне сервера



Чтобы воспользоваться советами вы должны иметь доступ к конфигурационным файлам сервера Apache (httpd.conf) и базы данных MySQL (my.cnf). Убедитесь, что у вас имеются необходимые привилегии для доступа и редактирования этих файлов (эту информацию вы можете узнать у своего хостера).

Не рекомендуется применять сразу все предложенные советы на практике. Большинство из них по отдельности не сильно увеличат производительность. Вам потребуется подобрать оптимальное сочетание для достижения наилучшего результата именно для вашего сервера.

Настройка Apache

  • Компилируйте Apache с как можно меньшим количеством модулей. Перед компилированием, отредактируйте файл /apache_1.x.x/src/Configuration, добавьте комментарий »#» перед каждой строкой начинающейся с «AddModule», которые вам не нужны. Ставьте комментарий в начале каждой строки перед «LoadModule» в httpd.conf, если вы не собираетесь использовать указанные модули.
  • Отключите ExtendedStatus, кроме тех случаев, когда вы на самом деле занимаетесь отладкой. То же самое надо сделать и с mod_info. Apache потребуется время, чтобы вычислить и записать всю отладочную информацию, если они включены, что не отражается благополучно на остальных процессах.
  • Для директивы “Hostnamelookups” укажите значение «Off» (для сервера Apache версий 2.x.x это значение указано по умолчанию). Если директива включена (т.е. ей присвоено значение «On»), то при каждом запросе к серверу вызывается поиск его DNS адресов – такая функция не является необходимой для большинства серверов.
  • Для достижения максимальной производительности без использования защиты символьных ссылок (symlink) добавьте директиву FollowSymLinks и удалите директиву SymLinksIfOwnerMatch, если она имеется. Если последняя директива включена, при каждом запросе сервер Apache запускает функцию lstat() (результаты выполнения которой не кэшируются). Представьте, что при 1000 запросах в минуту, сервер должен за это же время выполнить дополнительно 1000 команд!
  • Поставьте «MaxClients 128» или выше для более загруженных веб сайтов. Это позволяет большему количеству процессов запускаться по отдельности и предотвращает разбивание цепочки процессов. Чтобы выяснить лучшее значение, не ставьте его выше, чем ваш доступный RAM, основываясь на следующей формуле: 8М*(настройка).Если у вас 1Гб оперативной памяти, 8Мб*128=1024. Вы можете выбирать между 2 и 8ГБ памяти на каждый запрос клиента.
  • Для максимальной производительности поставьте AllowOverride None в httpd.conf. Есть побочный эффект – она отключает .htaccess файлы. Иначе – Apache пытается сделать просмотр .htaccess в каждой директории и родительской директории рекурсивно, независимо от того, есть ли он там.
  • Настройка MaxRequestPerChild контролирует создание процесса, и по умолчанию она стоит на 30. Если вы не используете скрипты, которые сильно загружают память, вы можете спокойно ставить значительно большее значение, к примеру 1000 или 10000. Если в основном вы обслуживаете статичные страницы, вы можете спокойно повышать это значение без возникновения каких-либо проблем.
  • Значение в 15 секунд по умолчанию для KeepAliveTimeout – это попытка не обрывать соединение с компьютером, посылающим запрос серверу раз в 15 секунд, в случае, если другой запрос достигнет сервера с этого компьютера для другого файла (например, картинки с ссылками). Если вы используете пути вместо ссылок или картинок, только один запрос будет сделан к серверу на страницу. Таким образом, процесс не будет ничего делать перед тем, как завершиться, через 15 секунд. На большинстве сайтов вы можете уменьшить это значение до 2 секунд и получить улучшение в скорости. Побочное действие это опции – TCP/IP overhead, однако, он минимален в настоящее время.
  • Настройка PHP

  • Используйте в PHP только необходимые модули. Модули которые вы не используете, закомментируйте в файле конфигурации php.ini.
  • Старайтесь использовать кэширующую программу. Например, XCache, Eaccelerator, Turk MMCache (устарела), memcache, Zend, APC, просто поищите их в интернете.
  • Настройка MySQL

  • Убедитесь, что “concurrent_inserts” включены в my.cnf – это позволяет INSERT значениям запускаться одновременно с SELECT значениями в таблицах MyISAM.
  • sort_buffer – каждый тред, которому нужно быть отсортированным, расположен в буфере данного размера. Увеличьте значение для ORDER BY или GROUP BY операций.
  • key_buffer_size – Увеличьте это значение для лучшего контроля над индексами на столько, насколько это возможно. Если вы сделаете его слишком большим, система станет очень медленно работать. Помните, что т.к. MySQL не кэширует данные, вам придётся оставить место под системный кэш операциооной системы.
  • table_cache относится к max_connections. К примеру, для 200 открытых соединений, вы должны иметь как минимум 200*n, где n-это максимальное количество таблиц за подключение. Скорее всего, вы должны выделить 3, так что если ваш max_connections является 200, поставьте table_cache на 600. Если вы запустите SELECT значения на большом количестве разных таблиц, будет небольшое переполнение, когда таблицы будут полны, т.к. на каждую таблицу, которая должна быть открыта, другая таблица должна быть закрыта. Вы можете избежать этого, если увеличите КЭШ таблиц.
  • Прочие советы

  • Хорошей практикой является отдача статики, изображений и файлов отдельным веб-сервером.
  • Запускайте скрипты процессов, такие как очистка, сбор статистики, во время наименьшей загруженности сервера.
  • Если большинство пользователей находится в России, разместите сервер в российском дата-центре.
  • Источник: wiki.iblink.ru



    This entry was posted in Блог and tagged . Bookmark the permalink.

    Leave a Reply

    Your email address will not be published. Required fields are marked *