Облегчаем жизнь серверу и ускоряем WordPress сайт

Я думаю, вы заметили, что я уделяю достаточно много внимания оптимизации скорости загрузки сайта. Мне интересна эта тема, потому что рано или поздно любой серьезный проект сталкивается с проблемой перегрузки сервера активностью посетителей.

Ранее я рассматривал техники полного кеширования сайта, настройку собственного сервера (часть 1, часть 2, часть 3), использование YSlow для ускорения сайта. Но это еще не все! Я также применял технику спрайтов (и не только) на своем сайте и включал zlib сжатие. Как видите, много всего я перепробовал и рассказал вам. Но и это не все…

Сегодня я нашел интересный плагин, который не претендует на уникальность – существует он достаточно давно, но просто он не так сильно распиарен, как Super Cache. Да, это плагин кеширования, и называется он DB Cache Reloaded. Оригинал этого плагина (DB Cache) перестал поддерживаться и обновляться автором, потому Daniel Frużyński создал версию Reloaded, которая рассчитана для WordPress 2.8.x-2.9.x. К сожалению, для WPMU+BP плагин не предназначен (я проверял – чуть не убил demo.сайт).

Итак, в чем особенность DB Cache Reloaded? Он кеширует, но не всю страницу – а лишь запросы к базе данных. Этим он экономит место на вашем диске и меньше нагружает винчестеры хостера. Я не буду вдаваться в технические подробности его работы (большинству это не нужно), кому будет интересно, тот прочитает обо всем на странице плагина. Просто скажу реальные результаты его работы.

Главная страница моего сайта очень нагружена – я отображаю 61 запись на ней (когда посчитал – был в шоке!), не считая блока комментариев и популярных записей в сайдбаре. Итого выходило на главной 129 запросов к базе данных и почти 35 мегабайт php памяти. Многовато, не так ли? И это при том, что я не использовал ни одного плагина кеширования!

После активации плагина DB Cache Reloaded и настройке его на соответствующей странице (я выставил жизнь кеша в течение 60 минут) вот мои новые результаты:

Сейчас: 23 запроса за 1.797 сек. | В кеше 106 запросов | Память – 27.07MB

Как видим, я значительно облегчил жизнь сервера, делая меньше запросов в базу примерно в 5 раз. Конечно же, это повлияло на скорость загрузки – на мой взгляд, увеличение заметно и невооруженным взглядом.

Скачать DB Cache Reloaded

комментариев 75

  1. totaliz:

    А с MU что делать, есть ли какой нибудь плагин?

  2. slaFFik,
    а почему не отрабатывается кеширование на стороне php хостера?.. ведь если бы установленный eaccelerator выполнял бы свои функции, то потребление памяти было бы меньше на 40%..

    А вообще свой сервер лучше еще по одной причине – хостер грузит все модули php которые используют пользователи, а конкретному проекту на WordPress процентов 20 этих модулей не нужно..

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

    totaliz,
    для MU можно использовать WP Super Cache, но осторожно :) но самое главное – любой серьезный проект на WP MU – это 100% отказ от услуг хостера с виртуальными серверами…

  3. totaliz:

    – это 100% отказ от услуг хостера с виртуальными серверами…

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

  4. Любой серьезный проект (хотя бы несколько 1000 пользователей, из них несколько сотен активных – это уже серьезность) – это ОЧЕНЬ большое количество потребляемой памяти (шире – ресурсов)!

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

    где то так…

    Но лучше наверное не в этой теме об этом… ИМХО

  5. Татьяна:

    Александр, а какой примерно сервер (по параметрам) нужен, чтобы держать “хотя бы несколько 1000 пользователей”?

  6. wcp:

    “А с MU что делать, есть ли какой нибудь плагин?” Поддерживаю вопрос

  7. @wcp:
    Я подумаю, можно ли что сделать с этим плагином.

  8. slaFFik если честно, очень бы хотелось увидеть статью по правильной настройке Super Cache (думаю это многим будет интересно), а также по разграничению прав на директории buddypress – проще говоря на какие папки нужно ставить 777, а на какие ни в коем случае нельзя ставить 777 :)

  9. Игорь:

    Что подразумевает под собой виртуальный сервер. Это технологии openvz, xen… Технология Xen лучше, не буду все описывать, кому интересно, почитайте документацию, просто разница, openvz юзает общее ядро всей системы, xen – для каждой виртуалки свое ядро, на реальном железе, ну навскидку, раза в три быстрее работает, то есть для wpmu+buddypress нужен не менее 1 GB оперативки, плагины кеширования… тратится время и ресурсы на первое создание кешированной страницы, очень трудно словить оптимальное время, при достижении определенного предела, когда много кешированных страниц, тоже начинаются сложности, DB Cache Reloaded пробовал, не работает, подтверждаю))я вот сам сижу и думаю, а что же мы хотели, естественно, большой проект, много ресурсов))

  10. Игорь:

    Потестите WP Super Cache Plus, на мой взгляд пока не обнаруживал траблы, автор утверждает, что он поддерживает eaccelerator, но я так и не разобрался как, мне доступно диск, memcached и memcached alt, у меня лучший результат показывает memcached alt, по скорости генерации страницы

  11. Татьяна,
    если все оптимизировать.. то 1x3Ghz, 1Gb RAM вполне.. для совсем комфортной работы – 2Gb или сразу 4Gb (на перспективу)

    Игорь
    не заметил каких либо больших затрат по ресурсам при использовании WP Super Cache, хотя смотрел это на отдельном сервере (не виртуальный, не VDS и прочее)

    По поддержке WPSC eaccelerator.. не знаю.. почему они должны друг друга поддерживать?.. один файлики текстовые генерит, а другой запросы кэширует…

  12. Игорь:

    Александр, мне сложно объяснить, я не прогер, я все делаю только – сделал посмотрел, сужу только визуально, первый раз захожу на страницу – долго, смотрю время генерации, второй раз – очень быстро). Вообщем я остался на старой конфигурации научил nginx видеть super cache, super cache кеширует при помощи memcached alt, может я не прав, но тогда зачем для вордпресса всякие клиенты для eaccelerator написали, вот если объясните, буду признателен

  13. Игорь:

    Да, насчет временных затрат, все зависит от количества посетителей… в данный момент подключившихся к серверу

  14. Игорь,
    генерация первый раз занимает достаточное время.. но при этом потребление ресурсов копеечное :)

    А вообще – WPSC надо аккуратно использовать на WP MU.. поддержка то есть.. но “как есть”

  15. Александр по поводу вашего ответа Татьяне “если все оптимизировать.. то 1×3Ghz, 1Gb RAM вполне.. для совсем комфортной работы – 2Gb или сразу 4Gb (на перспективу)”

    это на несколько тысяч одновременно, на несколько тыс, просто “регулярно активных” юзеров или вообще на несколько тыс в сутки? XD извините за нубский вопрос

  16. totaliz:

    ИМХО пора открыть тему форума… Вообще по MU где нибудь сосредоточиться, а то задолбался по инету инфу выкавыривать :-)

  17. Umbra,
    количество (максимальное) соединений – это одновременно обратившиеся к сайту пользователи (грубо – за секунду)
    по моим прикидкам – 1Gb, потянет до 200 таких подключений… правда сервер напряжется, но обработает запросы.. благо мы многим отдаем статики море (nginx, apache, wp super cache & etc)

  18. + зависимость нелинейная по памяти.. то есть 1Gb=200, то 2Gb~500 :) где то так..

  19. + все конечно же зависит от Ваших настроек системы.. насколько быстро будут обработаны запросы, как быстро процессы сбрасывают память (keepalive, очереди & etc.)

    думаю slaFFik скоро запостит новую публикацию по оптимизациям..

  20. Игорь:

    + все конечно же зависит от Ваших настроек системы.. и вот тут уже начинается )) а где хоститесь? каой канал хостера? какая технология виртуализации используется? какова мощность сервера хостера и сколько у него клиентов? какая операционная система установлена? какие сервера используются? каковы параметры Вашего виртуального сервера… ))

  21. Игорь:

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

  22. Игорь:

    Извините, опечатался, надо читать “не знаЯ” массу вещей. Вячеслав, на мой взгляд было бы удобно, если бы у вас на сайте был предпросмотр комментария ))

  23. Игорь,
    приводил свои данные.. то есть на личном опыте :) не завишу от виртуализации, количества клиентов хостера и тп..

    Да и вопрос Татьяны – скорее всего про выделеный сервер, а не про виртуальный.. иначе зачем вопросы про какой должен быть сервер?

    И вопрос тут не узкий… а с множеством зависимостей :) но как минимум должен быть хорошо отстроен сервер с системным и прикладным ПО – тогда уже вопрос к хостеру по поводу каналов связи и тп..

    * Нужен не предпросмотр (а может и он тоже), а скорее возможность в течении 5 минут отредактировать свое сообщение :)

  24. Игорь:

    Нее-e-e Александр )) Не познакомившись сначала с возможностями хостера, я бы уже не решился развивать проект, доходит до определенного момента,и потом начинаешь репу чесать, кто виноват, мои бока или хостера )) В Вашем случае, понятно, но люди то этого не знают (вернее теперь знают, что Вы отталкиваетесь от реального железа), а как я уже заметил, выбор VPS зависит от технологии виртуализации, виртуализация снижает возможность сервера, если бы он был расположен на реальном железе, а от этого напрямую зависит стоимость услуг, а это, естественно, интересует каждого. Насколько виртуализация снижает возможности и какой выбрать сервер, по техническим возможностям и сколько это будет стоить. Сказать невозможно, если не знать про хостера подробности

  25. Про то что у меня все на реально сервере крутится – даже тут три публикации есть ;)

    По поводу выбора VPS.. ну да.. нужно смотреть.. анализировать… но задать вопрос “какие мне нужны ресурсы” – без поправки на хостера не возможно!

    А вообще когда серьезный проект – покупается сервер за 3k..10k $ и ставится к хостеру (а точнее в DataCenter)! а тот гарантирует бесперебойную подачу питания, бэкапы данных, канал связи не хуже чем и тп…

  26. Rustamus:

    это каким должен быть проект, чтобы ему пришлось покупать сервер за 3000долларов?

  27. А найдите мне rack-сервер ниже 2500$ :) а в коридорах в ДатаЦентрах сервера типа “Рабочая станция за 300$” не ставят ;)

    зы: по цене очень даже Sun сервера и вариант более менее – стоит около 2700$

    Хотя если речь о том, что цена низкая.. ну для среднего (где реально не более 1-2 тыс активных пользователей) – нормально

  28. Игорь:

    Rustamus Возможности BuddyPress позволяют вам создать проект любой сложности, в том-то и дело)) VPS в 250 MB оперативной памяти, nginx как фронтенд, при наличии у проекта 50 блогов, загибается при 6 К посетителях в сутки, стояла панель ISP manager и в то время я и понятия не имел что такое сервера, все по умолчанию, ну вот, как-то так, хоть приблизительные вам цифры

  29. Игорь:

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

  30. Ну раз уж заговорили о тонкостях, тогда еще нужно вспомнить про потребление ресурсов buddypress. При тестовой установке bp (ставилось на него все подряд, чтобы посмотреть что нужно, а что нет) главная страница по данным WP Tuner кушала 50 мб памяти, на текущий момент это 9 мб памяти :) т.е. я так думаю, что при указании каких-то цифр нужно еще уточнять степень прожорливости bp

  31. Rustamus:

    что-то разочаровываете вы меня такими цифрами ;)
    Я свой проект на Друпале почти доделал, потом сюда попал и решил под Баддипресс его сделать (НА BP гораздо красивее и нагляднее получается)
    У меня пользователи могут регестрироваться, создавать по одному блогу, создавать группы.
    Т.е. на VPS такой проект не пойдет?
    (где тут смайл “в шоке” ;) )

  32. После установки accelerator на php и использования lite-версии перевода для “морды”… потребление памяти даже на самом “тяжелом” блоге не более 22Mb, в админках не более 25Mb..

  33. Rustamus:

    что такое lite версия перевода?

  34. Игорь:

    Umbra, да я про прожорливость buddypress не упомянул, потому что, вокруг него то все и крутится)) то есть какой сервер нужен для wpmu+buddypress. Все мы тут добровольные тестеры, кто-то так сделал, кто-то так, лично я поставил перед собой задачу, взял у друга комп с чердака, 250 mb оперативки, 3 пенек, мне аж дух захватывает, смогу ли 20 K посетителей выжать? ну не смогу, да и… Но на это надо время… Учусь, читаю, пробую…

  35. @Игорь: какое совпадение) у меня именно та же задача, только в моем случае – не любопытства ради… ясно одно – на слабенькой машине (хотя в идеале это должно касаться любого проекта) любые плагины bp (ну или почти любые) противопоказаны. Все нужно делать “ручками” :(

    в принципе имхо 9 мб в моем случае для bp довольно неплохой результат (если учесть, что я не разбираюсь, ни в программировании, ни в администрировании). Нужно еще посмотреть, как поведет себя виджет кэш + супер кэш (правда Бог его знает, как его настраивать для MU+BP).

  36. Игорь
    вопрос – а что это у Вас за социалка такая модная? :)

  37. Игорь:

    Александр, все начиналось не так, описывать долго, человек хочет одно, потом все переворачивается и начинается другое))
    В подписи сайт

    Umbra, виджет кэш ведет себя нормально, в установке прост, но я пока не пользуюсь, слишком часто что-то меняю, вставляю…

  38. Игорь, про сайт тогда вопрос.. как планируете 20к юзеров затестить? :) ab от apache, siege с портов – это синтетика.. от которой (кстати) свой портал закрыл полностью…

  39. Игорь:

    Александр, а вы с кем сейчас разговаривали? На этом моменте поподробнее, пожалуйста что есть “ab от apache, siege с портов – это синтетика.. ” или куда идти читать?

  40. Игорь:

    Гугл рулит, удаляюсь))

  41. Игорь:

    Александр, все проще, все это хорошо, и понятно, но пусть будет естественно, когда увижу циферки в awstats, тогда и все будет хорошо, а кстати, надо попробовать затестить утилитами

  42. Игорь, Вам и писал :)

    ab – это утилита для стрессовой нагрузки apache сервера, ставится вместе с apache (ab -n 100 -c 10 http://example.com/ , где n-количество обращений, c-количество подключений в одном обращении)
    siege – это программа, ее ставить надо.. тоже дает возможность создать некий стресс веб-серверу

  43. тестите ab -n 10000 -c 100 http://example.com – если сервер VPS – то переживет, если нет – умрет :) (залезет в swap)

  44. Игорь:

    Спасибо, за данное мне в руки занятие)) уже установил и уже тестирую…

  45. Игорь:

    [ET Результат теста закешированной страницы]
    Completed 1000 requests
    Completed 2000 requests
    Completed 3000 requests
    Completed 4000 requests
    Completed 5000 requests
    Completed 6000 requests
    Completed 7000 requests
    Completed 8000 requests
    Completed 9000 requests
    Completed 10000 requests
    Finished 10000 requests

    Server Software: nginx/0.8.20
    Server Hostname:
    Server Port: 80

    Document Path: /2010/01/08/privet-mir/#comments
    Document Length: 9891 bytes

    Concurrency Level: 100
    Time taken for tests: 82.406 seconds
    Complete requests: 10000
    Failed requests: 0
    Write errors: 0
    Total transferred: 101780000 bytes
    HTML transferred: 98910000 bytes
    Requests per second: 121.35 [#/sec] (mean)
    Time per request: 824.055 [ms] (mean)
    Time per request: 8.241 [ms] (mean, across all concurrent requests)
    Transfer rate: 1206.16 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 0 0 0.8 0 13
    Processing: 183 821 151.2 748 1595
    Waiting: 182 818 150.0 748 1592
    Total: 195 821 151.0 748 1595

    Percentage of the requests served within a certain time (ms)
    50% 748
    66% 796
    75% 863
    80% 891
    90% 1079
    95% 1113
    98% 1298
    99% 1329
    100% 1595 (longest request)

    [/ET]

    а если example.com, то умирает после первых 20 запросов

  46. Игорь,
    результаты в студию!:)

  47. Игорь:

    [ET Результат страницы, предполагающей кеширование]
    ab -n 10000 -c 100 http://uicrothuwepran.мойдомен.com/2010/01/08/privet-mir/#comments
    This is ApacheBench, Version 2.3
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/

    Benchmarking uicrothuwepran.мойдомен.com (be patient)
    Completed 1000 requests
    Completed 2000 requests
    Completed 3000 requests
    Completed 4000 requests
    Completed 5000 requests
    Completed 6000 requests
    Completed 7000 requests
    Completed 8000 requests
    Completed 9000 requests
    Completed 10000 requests
    Finished 10000 requests

    Server Software: nginx/0.8.20
    Server Hostname: uicrothuwepran.мойдомен.com
    Server Port: 80

    Document Path: /2010/01/08/privet-mir/#comments
    Document Length: 9891 bytes

    Concurrency Level: 100
    Time taken for tests: 85.676 seconds
    Complete requests: 10000
    Failed requests: 0
    Write errors: 0
    Total transferred: 101780000 bytes
    HTML transferred: 98910000 bytes
    Requests per second: 116.72 [#/sec] (mean)
    Time per request: 856.760 [ms] (mean)
    Time per request: 8.568 [ms] (mean, across all concurrent requests)
    Transfer rate: 1160.12 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 0 0 1.4 0 26
    Processing: 332 852 184.8 797 1926
    Waiting: 331 849 182.1 795 1904
    Total: 344 852 184.6 797 1926

    Percentage of the requests served within a certain time (ms)
    50% 797
    66% 863
    75% 893
    80% 932
    90% 1066
    95% 1174
    98% 1515
    99% 1708
    100% 1926 (longest request)

    [/ET]

    Дальше:

    [ET вот результат index.php, где кеширование не предполагается]
    ab -n 10000 -c 100 http://мойдомен.com/index.php
    This is ApacheBench, Version 2.3
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/

    Benchmarking мойдомен.com (be patient)
    apr_poll: The timeout specified has expired (70007)

    [/ET]

    даже не взлетает))

  48. Игорь:

    siege, в принципе то же самое, но видно что умирает после 15-20 строчек

  49. Ребят, прошу, не используйте домен xxx.ru для примера. Вы видели, куда ведет этот адрес? Потому вас и банит акисмет.
    Используйте example.com – это международный стандарт сайта-примера.

  50. Игорь:

    Сейчас у меня стоит wpsc, который не предполагает обновление по заголовкам, wpsc+, предполагает, то есть если что-то обновилось, он принудительно выдаст свежую страницу и закеширует, но у меня начались траблы при входе и выходе из админки, сам не могу найти причину, буду пробовать, к чему я клоню, кешировать надо, наверное, но при определенной ситуации может сыграть не на руку http://blog.sjinks.pro/wordpress/601-wp-supercache-under-high-load-part-2/

  51. Кешируйте на стороне веб-сервера и будет счастье… ;)
    а у меня кеширование идет везде где это имеет смысл – все супер!

  52. slaFFik, вроде меня еще не банили :)

    Игорь,
    чтоб избежать arp_.. ошибок, пользуйтесь -n 10000 -c 5, обычно этого достаточно! и смотрите через top, – как “подыхает” сервер ;) то есть следующий этап закрыться от массовых обращений

  53. Игорь:

    Спасибо Александр, буду пробовать.

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

    • Lovedancer,
      Я же писал, что этот плагин не работает с WPMU – читайте пост внимательнее (конец третьего абзаца)!

  55. Но если прочитать внимательно мой комментарий, то можно углядеть, что я там не писал, что у меня WPMU =) а если посмотреть внимательно на блог, то можно увидать, что у меня простой WP =) …и кстати заработал он ….вот только почему-то, такую мне нагрузку создал, что у меня сервак подвис….. =) пришлось его рубить… а у меня и без него нагрузка ай-яй-яй….я то решить вопрос пытаюсь этот, и делаю разные оптимизации, но это почти не помогает….кстати я ищу человека, который в паре бы со мной, смог бы мне помочь с нагрузкой моего блога…..конечно же за денежное вознаграждение….

  56. Кстати, а как ведёт себя твоя социальная сеть?

  57. Прочитал твои предложения, и просто возжелал эту соц сеть =) …пожалуйста, скажи, как у неё с нагрузкой и всё такое? Просто у меня сейчас аномально грузиться wordpress….возможно действительно он у меня скрытый WPMU =))))

  58. Lovedancer,
    у slaFFik-a можно почитать мои советы по оптимизации сервера + советы от самого slaFFik-a по WP MU, BP..

  59. Всё, читал, почти всё пробовал, и ещё миллионы других советов со всего инета…многое помогало, но чем больше становился траф, тем всё больше увеличивалась нагрузка…..чего я только уже не делал….у меня осталось несколько вариантов:

    1-купить более дорогой хостинг
    2-перейти на другой движок
    3-переустановить вордпресс
    4-улучшить сервер

    но…

    1-по финансам возможности особой нет, хотя заинтересовал хостинг avihost..я с ними уже списался..хотя я так же не знаю, выдержит ли он мой сайт.
    2-вот как раз заинтересовал budypress, но я так же не знаю, выдержит ли он такую нагрузку
    3-ищу как правильно это сделать
    4-хостер отказывается это делать

  60. DeamonShan:

    VPS [1.5GHz, 1Gb, HDD50Gb] + FastCGI + NGINX = 1000 активных посетителей!

  61. DeamonShan:

    и вообще в качестве баз данных лучше не брать MySQL…

  62. А что тогда брать вообще?

  63. Не берите вообще, делайте сайт на html.

  64. Jettochkin:

    :)))))))))))))

    На самом деле MySQL ничего так.. его надо правильно настраивать..

    Попробуйте воспользоваться InnoDB для BP…

  65. Jettochkin:

    DB Cache Reloaded Error: wpdb class is redefined, plugin cannot work!

  66. А при включении DB Cache надо отключать wp-super-cache?

    • При использовании wp-super-cache в DB Cache уже нет необходимости. Так что можете отключить и удалить.

  67. Подскажите пожалуйста у меня проблема.после использования плагина db cache reloaded у меня все пропало и блог и админка что делать?

  68. Максим:

    DB Cache Reloaded Fix – Это новая версия плагина? Просто ввёл в поиске и на втором месте в списке найденных он оказался :)

  69. Действительно, на HTML4 или HTML5 сайт работает удивительно быстро. Но жизнь диктует свои условия и без MySQL не обойтись.
    Что касательно движка WordPress или Drupal, или Joomla, то с каждым обновлением они будут все тяжелее и тяжелее.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *