Различия
Показаны различия между двумя версиями страницы.
сети:оптимизация_скорости_работы_сайта [2019/03/12 10:03] |
сети:оптимизация_скорости_работы_сайта [2022/04/01 15:08] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== оптимизация скорости работы сайта ====== | ||
+ | Применимость: | ||
+ | |||
+ | Слова для поиска: | ||
+ | |||
+ | |||
+ | ===== Задача: | ||
+ | |||
+ | При ограниченных ресурсах получить максимальную производительность (доступность) сайта и устранить причину возникновения ошибки **" | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Решение: | ||
+ | |||
+ | Иногда невозможно зайти в консоль сервера, | ||
+ | Cannot allocate memory: fork: Unable to fork new process | ||
+ | |||
+ | Проверьте последнюю колонку в выводе команды: | ||
+ | cat / | ||
+ | Если значение не равно " | ||
+ | |||
+ | Если у вас физический сервер или используется виртуализация KVM (XEN), то при нехватке памяти процессы начинают вытесняться в медленную swap-память, | ||
+ | Наличие swap-памяти снижает необходимость оптимизации сервера, | ||
+ | Но это не работает на виртуализации OpenVZ с ядром 2.6.18-* | ||
+ | Более свежее ядро 2.6.32 поддерживает псевдо swap (vswap), но еще недостаточно стабильно. Мы пытались его использовать, | ||
+ | |||
+ | На OpenVZ | ||
+ | |||
+ | | ||
+ | |||
+ | Проблема обнаруживается по сообщениям в системном журнале со словами **Out of memory** | ||
+ | |||
+ | Иногда недостаток памяти приводит к невозможности зайти в консоль сервера, | ||
+ | |||
+ | Выполните команду **vzubc** и получите вывод подобный этому: | ||
+ | |||
+ | < | ||
+ | BEANS FOR UID 309 | ||
+ | resource | ||
+ | kmemsize | ||
+ | lockedpages | ||
+ | privvmpages | ||
+ | </ | ||
+ | |||
+ | |||
+ | Если на вашем сервере нет скрипта vzubc можно использовать команду: | ||
+ | |||
+ | cat / | ||
+ | |||
+ | Этот способ менее удобен потому что информация будет смесью представлений из количества страниц памяти и байтов. | ||
+ | |||
+ | Есть несколько вариантов решения этой проблемы. В любом случае нам придется ограничить потребление памяти вебсервером и другими процессами. | ||
+ | |||
+ | ==== Облегчение системы ==== | ||
+ | |||
+ | Начните с отключения ненужных сервисов. | ||
+ | |||
+ | Довольно часто можно видеть болтающийся без дела демон ftp. Он потребляет немного, | ||
+ | |||
+ | Отключите ненужные модули apache. Только убедитесь, | ||
+ | |||
+ | Скрипты сбора статистики типа Webalizer или | ||
+ | |||
+ | ===== Apache MPM ===== | ||
+ | |||
+ | Вебсервер должен одновременно обрабатывать большое количество подключений и запросов, | ||
+ | |||
+ | У сервера Apache2 мультипоточность реализована посредством подключаемых модулей многопоточной обработки - MPM. Существует две основных модели MPM модулей - это **worker MPM** и **prefork MPM**. | ||
+ | |||
+ | Определить какой модуль использует ваш сервер можно командой | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Но можно обойтись и без этой проверки. | ||
+ | |||
+ | В подавляющем количестве случаев используется | ||
+ | |||
+ | **Worker MPM** при запуске создает несколько дочерних процессов, | ||
+ | |||
+ | В качестве преимущества данного модуля указывается пониженное потребление памяти по сравнению с Prefork модулем. Этот модуль рекомендуется для высоко нагруженных веб серверов и практически никогда не используется на виртуальных серверах. | ||
+ | |||
+ | **Prefork MPM** при запуске | ||
+ | |||
+ | **Prefork MPM** рекомендуется использовать там, где отладка мультипоточных приложений не реализована на должном уровне. Отладка | ||
+ | |||
+ | ==== Prefork MPM ==== | ||
+ | |||
+ | |||
+ | Решить задачу | ||
+ | |||
+ | |||
+ | Например ваша конфигурация (/ | ||
+ | |||
+ | < | ||
+ | StartServers | ||
+ | MinSpareServers | ||
+ | MaxSpareServers | ||
+ | ServerLimit | ||
+ | MaxClients | ||
+ | MaxRequestsPerChild | ||
+ | </ | ||
+ | |||
+ | |||
+ | Каждое соединение требует отдельного процесса вебсервера. | ||
+ | Каждый процесс httpd обычно требует 20-50Мб, а у вас всего 3072Мб и свободных 2700Гб | ||
+ | Потому я поставил лимит 100. | ||
+ | |||
+ | Это не значит, | ||
+ | При недостатке памяти клиент получает обрыв связи и недоступность сервера, | ||
+ | |||
+ | При таком варианте вы не теряете клиентов. | ||
+ | |||
+ | На самом деле это значение надо тщательно подбирать опытным путем наблюдая за счетчиком превышений и количеством свободной памяти. | ||
+ | |||
+ | |||
+ | |||
+ | Мой вариант конфигурации: | ||
+ | < | ||
+ | StartServers | ||
+ | MinSpareServers | ||
+ | MaxSpareServers | ||
+ | ServerLimit | ||
+ | MaxClients | ||
+ | MaxRequestsPerChild | ||
+ | </ | ||
+ | |||
+ | Я уменьшил значение MaxRequestsPerChild, | ||
+ | Этот параметр определяет после какого количества запросов процесс будет перезапущен, | ||
+ | |||
+ | Но слишком частый перезапуск тоже требует ресурсов. | ||
+ | |||
+ | Здесь надо искать компромисс методом подбора. | ||
+ | |||
+ | И придется понаблюдать за результатом после каждого изменения. | ||
+ | |||
+ | Можете использовать нагрузочные тесты типа apache benchmark, но они неспособны имитировать реальную работу вашего сайта. | ||
+ | |||
+ | |||
+ | ==== NGINX и Lighttpd ==== | ||
+ | |||
+ | |||
+ | Радикальным методом борьбы с потреблением памяти является использование облегченных серверов NGINX или Lighttpd | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | Их можно использовать двумя способами: | ||
+ | |||
+ | - Вообще исключить apache2 | ||
+ | - Использовать в качестве промежуточного http-proxy для доступа к apache. | ||
+ | |||
+ | Первый вариант используется когда вам не нужны особые возможности специфических возможностей | ||
+ | Пример реализации первого способа вы найдете по ссылке внизу этой статьи. | ||
+ | |||
+ | Если без apache не обойтись, | ||
+ | |||
+ | Следует заметить, | ||
+ | |||
+ | ===== LOGROTATE ===== | ||
+ | |||
+ | На размер процесса вебсервера может влиять размер системного журнала. Иногда журнал вырастает до нескольких десятков гигабайт. Процесс, | ||
+ | |||
+ | Проверьте | ||
+ | |||
+ | |||
+ | Нужны ли вам журналы вебсервера? | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | <code | maxclients.sh> | ||
+ | #!/bin/sh | ||
+ | CC=$(ps -o rss -C httpd | grep -v RSS| sort -d | tail -1); | ||
+ | service httpd stop | ||
+ | MM=$(free | grep Mem | awk ' | ||
+ | let CL=" | ||
+ | echo " | ||
+ | echo " | ||
+ | service httpd start | ||
+ | </ | ||
+ | |||
+ | | ||
+ | ===== Ускорители интернета ===== | ||
+ | Используйте поисковую службу для поиска специализированных услуг ускорения доступа к вашему сайту. | ||
+ | Есть достаточно организаций специализирующихся на оптимизации вебсайтов и защите их от перегрузки. | ||
+ | |||
+ | Используйте [[http:// | ||
+ | |||
+ | |||
+ | Приведу несколько примеров | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | ===== Ссылки: | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | ---- | ||
+ | Актуальность: | ||
+ | |||
+ | {{tag> web оптимизация}} | ||