WordPress — нагрузка блога на сервер хостинга

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

Измерение нагрузки на сервер сайтом или блогом на движке WordPress

В большинстве случаев наиболее важными техническими характеристиками сайта, которые к сожалению могут доставить немало неприятностей, являются: объем расхода оперативной памяти скриптами, количество запросов к базе данных в короткие промежутки времени и время, потраченное для формирования динамических страниц. Последствиями, кроме претензий от админов хостинга, могут еще оказаться и недовольства посетителей вашего ресурса, а хуже всего вообще уменьшение посещаемости.

Так как же попроще и с меньшими затратами, не обладая особыми познаниями произвести оценку нагрузки на сервер вашим блогом или сайтом?
Оказывается все очень даже просто и доступно практически для всех, включая начинающих веб-мастеров. Разработчики WordPress уже об этом давно позаботились и снабдили свой движок полезными функциями. В частности это функции, которые нам в дальнейшем понадобятся:

get_num_queries()

— данная функция выдает количество запросов к базе данных, выполненных за время работы скриптов WordPress для генерации и выдачи динамической страницы блога;

timer_stop( $display = 0, $precision = 3 )

— эта функция возвращает количество времени (в секундах), затраченное для генерации страницы сайта;
— примеры ее использования:
timer_stop( 0, 3 ) — выдаст результат в виде 0,123;
timer_stop( 0, 5 ) — выдаст результат в виде 0,12345;

Ну и еще нам не помешает парочка родных функций PHP:

memory_get_usage ( void  )

— функция возвращает объем памяти (в байтах), выделенной для PHP скриптов, использованных для генерации страниц сайта;

memory_get_peak_usage ( [ bool $real_usage = false ] )

— эта функция возвращает пиковое (самое наибольшее) значение объема памяти (в байтах), занятого функциями и данными PHP скриптов, использованных для генерации страницы сайта;
Параметр real_usage по умолчанию установлен в значение FALSE и его можно вообще не указывать, но при этом будет выдано количество памяти использованное функцией emalloc(). При установке real_usage в TRUE будет выдано значение объема памяти, полученное от системы.

Ну а сейчас, после краткого ознакомления с необходимыми нам функциями, мы можем написать небольшой код, который выведет количество SQL запросов к базе данных, затраченное на генерацию страницы время и память, использованную PHP скриптами.

Расход памяти: ' . round( memory_get_usage()/1024/1024, 2 ) . ' Mb';
   if ( function_exists('memory_get_peak_usage') )
      echo '
Пиковый расход памяти (реальный): ' . round( memory_get_peak_usage(TRUE)/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (использован функцией emalloc()): ' . round( memory_get_peak_usage()/1024/1024, 2 ) . ' Mb'; ?>

Этот код теперь можно вставить в удобное для вас место вашей темы (шаблона). Лучший на мой взгляд вариант — это разместить его в «подвале» (footer, футере, нижней части страницы), основной код которого обычно расположен в файле footer.php в каталоге вашей темы (шаблона). Код оптимальнее будет разместить в самом конце «подвала», чтобы он был максимально ближе к закрывающему тегу BODY.

У вас конечно может появиться логичный вопрос:
— Почему созданный нами код оптимальнее размещать в «подвале» и тем более в самом его конце?
Ответ таков:
— Наш код, размещенный в самом конце «подвала», выведет наиболее актуальные данные, так как до его вызова уже будут выполнены все необходимые запросы к базе данных, закончат работу практически все функции WordPress и скриптов темы вашего блога, затраченные на генерацию страницы.

В итоге, получаемые данные о расходе ресурсов сервера вашим сайтом или блогом помогут оценить, насколько рациональным был выбор определенного хостинга и предоставляемых им ресурсов для вашего сайта. Благо, что в настоящее время многие хостеры дают кое-какое время на тестирование работоспособности сайта прежде, чем вы оплатите их услуги на длительный срок. Кроме этого, можно будет понять, стоит ли пробовать, к примеру, сменить установленные для блога плагины на альтернативные, которые потребляют меньше ресурсов или вообще удалить некоторые из них, чтобы уменьшить нагрузку на сервер. По статистике и на основе практики замечено, что дополнительную (а иногда чрезмерную) нагрузку на сервер в основном несут в себе некоторые установленные плагины, своеобразные темы оформления и разнообразные функции, добавленные в скрипты собственноручно. Во многих случаях снизить нагрузку на сервер может помочь установка плагинов или модулей сервера, которые обслуживают и обеспечивают кэширование. В таком случае возможно удастся избежать удаления или замены уже установленных и понравившихся вам плагинов и прочих самостоятельных модификаций.

Однако, мы кое-что упустили при создании скрипта для оценки нагрузки на сервер, не кажется ли это вам?
Да, если мы вставим созданный нами код в «подвал» блога, то его, к нашему сожалению, будут видеть все посетители сайта или блога, и этого нам конечно не хотелось бы допускать.

Так давайте сделаем так, чтобы статистику расхода ресурсов сервера видел ТОЛЬКО АДМИН блога, а всем остальным она не мозолила бы глаза. Для этого нам всего лишь понадобится добавить проверку уровня доступа пользователя к страницам сайта перед запуском нашего кода. Сделать это очень даже просто. Мы добавим в наш изначальный код  всего лишь одно условие:


В результате наш законченный код будет выглядеть следующим образом:

Расход памяти: ' . round( memory_get_usage()/1024/1024, 2 ) . ' Mb';
        if ( function_exists('memory_get_peak_usage') )
            echo '
Пиковый расход памяти (реальный): ' . round( memory_get_peak_usage(TRUE)/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (использован функцией emalloc()): ' . round( memory_get_peak_usage()/1024/1024, 2 ) . ' Mb'; } ?>

Для придания странице сайта более эстетического вида к полученному коду можно добавить немного стилизации, например так:


      
%d за %s секунд. '), get_num_queries(), timer_stop(0, 3) ); if ( function_exists('memory_get_usage') ) echo '
Расход памяти: ' . round( memory_get_usage()/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (реальный): ' . round( memory_get_peak_usage(TRUE)/1024/1024, 2 ) . ' Mb'; if ( function_exists('memory_get_peak_usage') ) echo '
Пиковый расход памяти (функция emalloc()): ' . round( memory_get_peak_usage()/1024/1024, 2 ) . ' Mb'; ?>

В этом коде, если вы заметили, вставлены и CSS-параметры. Но не стоит, думается мне, с пренебрежением относиться к этому, и что совсем это выглядит «не по современному». Этим, с моей точки зрения, даже стоит воспользоваться, так как этот код будет доступен только админу, и мы в то же время не будем загромождать реальные CSS-файлы излишествами, которые не будут использоваться по прямому назначению.

И напоследок… Конечно можно было бы все выше изложенное реализовать в плагине, но для понимания самого процесса и простоты его реализации я не стал описывать здесь вариант с плагином. Однако парочку примеров по созданию относительно простых плагинов своими силами я выложу на этом блоге в ближайшее время.

Удачи всем и до новых встреч!

Метки: PHP, WordPress, функции

Поделитесь материалом с другими, воспользуйтесь этими кнопками:
Получать обновления и новые материалы блога по E-mail

8 комментариев к “WordPress — нагрузка блога на сервер хостинга”

  1. Janett:

    Спасибо.
    Очень полезная статья .
    Интересно, а будут ли статьи о нагрузке сайта Joomla на сервер хостинга?

    • Насколько я помню, в Joomla есть класс JProfiler для таких целей. Раз уж появился интерес, то я чуть позже напишу о нем и как им пользоваться на блоге.
      Но тем не менее можно для Joomla использовать способ, который я описывал в статье «Объем памяти и время работы PHP скрипта» из рубрики «PHP».

  2. Neo55:

    Отличная статья. Сегодня обязательно воспользуюсь этим кодом на своем сайте. Автор ты отличный программист, и пишешь как хороший журналист. Спасибо за полезную статью. Побольше бы таких сайтов.

  3. WordPress уроки:

    Отличная статья буду тестировать.

  4. Alex:

    Добавлю немного от себя. Функция реально хорошая и помогает увидеть насколько сайт грузит хостинг. Если включить ее перед установкой плагина, то можно вычислить, какую нагрузку тот или иной плагин создает.

    В кодеске нашел код, который позволяет посмотреть, какие запросы делает страница. Сам не разобрался, но вдруг для кого-нибудь будет полезно:
    codex.wordpress.org/Editing_wp-config.php#Save_queries_for_analysis

    • Спасибо, Alex, что упомянул о возможности записи SQL-запросов для последующего анализа.
      Там указано определение SAVEQUERIES, которое при установке в значение «true» активирует запись (логирование) всех подряд SQL-запросов в виде массива.

      define( 'SAVEQUERIES', true );
      

      В массив будут записываться и время, затраченное на выполнение каждого запроса. Там приведен и пример кода для вывода всех данных о запросах на страницу сайта.
      Это очень полезно для отладки, чтобы оценить производительность например плагинов или функций и оценить нагрузку на сервер базы данных.

      Имейте в виду, что логирование SQL-запросов потребляет много ресурсов, что скажется на производительности сайта, поэтому не забывайте после отладки удалить или закомментировать строку define( ‘SAVEQUERIES’, true ); в файле конфигурации wp-config.php или установить в ней значение «false».

      Вот пример того, как будут выглядеть данные (это только малая часть массива):

      Array
      (
          [0] => Array
              (
                  [0] => SELECT option_value FROM wp_options WHERE option_name = 'rewrite_rules' LIMIT 1
                  [1] => 0.0010001659393311
                  [2] => require('\domains\wp360.qa\wp-blog-header.php'), wp, WP->main, WP->parse_request, WP_Rewrite->wp_rewrite_rules, get_option
              )
      
          [1] => Array
              (
                  [0] => SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')  ORDER BY wp_posts.post_date DESC LIMIT 0, 2
                  [1] => 0.0019998550415039
                  [2] => require('\domains\wp360.qa\wp-blog-header.php'), wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts
              )
      

      При желании можно эти данные обработать по другому, чтобы они выглядели в более читабельном и понятном виде.

  5. Feanor184:

    Отличная статья! Единственный вопрос, как оценить оптимальное колличество запросов к базе данных по вашему?:) Какие параметры нагрузки будут максимально допустимыми? :)

  6. Дмитрий:

    Думаю хорошая полезность! Теперь можно отслеживать и регулировать степень нагрузки на сервер, убирая высоко-ресурсо-потребляемые плагины) Да и вообще можно будет поэксперементировать с оптимизацией)

    Ответить

Оставить комментарий к Alex

Уважаемые посетители, пожалуйста, пишите осмысленные и исчерпывающие комментарии. Короткие фразы типа «спасибо автору», «возьму на заметку», «мне помогло» и т.п. будут удаляться. Исключение, когда Вы отвечаете на чей-то вопрос или благодарите за помощь.

Ссылки на Ваш сайт получат статус DoFollow после третьего комментария.

Для вставки кода в комментарии можно использовать BB-коды:
[text] [/text], [php] [/php], [html] [/html]

Подписаться на обновления блога 4remind.ru по RSS
Новости блога в социальных сетях

4remind.ru - персональный блог вебмастера



Наверх
Наверх