Поддержка Проблемы и решения Блог на WP роняет сервер

  • Здравствуйте.
    Подскажите пожалуйста — имеется блог на WP на собственном сервере на linux centos, блог не особо посещаемый, не более 100 уникальных посетителей в сутки.
    Движок и установленные плагины давненько не обновлялись, может около полугода, может больше, в один прекрасный день с неделю назад сервер повис напрочь. Еле зашёл на него, и увидел, что сразу после загрузки память и CPU забивается на глазах, сервер перестаёт отвечать.
    Отключил от него интернет, стало всё нормально, в смысле — перестал повисать.
    Так и подумал, что скорее всего подломали движок блога.
    Убрал всё содержимое блога из веб-папки html, скачал свежую версию WP с оф.сайта, перетащил её на сервер, обновил все файлы, обновил базы, в общем как обычно обновил движок блога.
    Но сперва грешил на плагины, поэтому их стал частями обратно заливать на веб-сервер, сервер опять упал. Убрал их, залил чисто папки из дистрибутива блога — опять виснет всё.
    В общем методом тыка ВРОДЕ БЫ выяснил — стоит только залить на сервер папку wp-includes/widgets, которая как раз появилась только в версии 4.6 — и тут же вижу по просмотру команды top, что свободная память начинает уменьшаться, загрузка CPU растёт, комп виснет.
    Быстро удаляю эту папку — ситуация выправляется, сервер работает.
    Таким образом сейчас залито всё, включая папку со всеми плагинами, кроме той папки widgets, и работает нормально…
    Возникает вопрос — почему на старой версии дистрибутива всё висло, ведь там этой папки widgets не было?
    Содержимое папок проверял на наличие левых файлов, вроде ничего…
    Может кто подскажет, что за чертовщина происходит?

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Модератор Yui

    (@fierevere)

    ゆい

    какая у вас конфигурация «своего сервера» по памяти
    конфигурация apache (тип MPM, его конфигурация)
    через что работает PHP (SAPI),
    какой вебсервер на фронтэнде (nginx? apache? режим реверс прокси)
    используется ли акселератор PHP опкода

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

    скриншот top бы в момент «подвиса» сервера хорошо бы тоже увидеть
    ну и логи.. логи.. логи..

    Хм, немного сложновато для меня, но попробую ответить…)
    Процессор — Atom 1.6 Ghz
    Память — 1 гб.
    apache mpm — prefork.
    Ставился апач и пхп без изысков, по инструкции с инета — сперва mariadb, потом апач, потом пхп через yum install…
    Скриншот в момент зависа — http://uploads.ru/Wi7st.jpg
    Логи ковырял в районе дня, когда всё повисло, увидел вот такое примерно, и таких кусков было много:

    «[Fri Aug 26 22:16:58.919774 2016] [:error] [pid 2451] [client 191.96.249.54:36231] \xd0\x91\xd0\xb0\xd0\xb7\xd0\xb0 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85 WordPress \xd0\xb2\xd0\xbe\xd0\xb7\xd0\xb2\xd1\x80\xd0\xb0\xd1\x82\xd0\xb8\xd0\xbb\xd0\xb0 \xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd1\x83 Lost connection to MySQL server during query \xd0\xb2 \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x82 \xd0\xbd\xd0\xb0 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81 SHOW COLUMNS FROM wp_interlinker_divide_chars WHERE lower(Field) = ‘characters’;, \xd0\xb2\xd1\x8b\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 include(‘wp-load.php’), require_once(‘wp-config.php’), require_once(‘wp-settings.php’), include_once(‘/plugins/cross-linker/crosslink.php’), crossLinkerClass->table_interlinker_install »

    И ещё, может имеет отношение — примерно за пару недель до этого заметил на phpBB-форуме, стоящем тут же на сервере, что гостей он показывает по сотне и более, тогда как в админке на деле бывало в тот момент всего 2-3 поисковых бота…

    Модератор Yui

    (@fierevere)

    ゆい

    ясно, процессор медленный, обрабатывает запросы достаточно медленно

    load average 81 , еще бы не висло
    памяти всего 1 Гб, куча запущеных рабочих процессов апача естественно prefork, сожравших всю память

    что можно посоветовать
    * посмотреть возможность улучшения железа, побыстрее проц, побольше памяти
    * ограничить аппетиты апача

    <IfModule mpm_prefork_module>
        StartServers          12
        MinSpareServers       6
        MaxSpareServers       12
        ServerLimit           24
        MaxClients            24
        MaxRequestsPerChild   128
    </IfModule>
    

    вот примерно так, в Ubuntu это /etc/apache2/apache2.conf , в центос — поищите сами, после изменения надо перезагрузить сервер или перезапустить сервис apache2

    ситуацию это сильно не изменит, потому что если клиентов много, то некоторые просто не смогут подключиться к серверу. Но сервер ваш перестанет пытаться кушать память сверх доступной, также load average должна упасть до пределов ~24

    * Обязательно установить акселератор PHP, если еще не сделали, например php5-xcache (варианты — apc, opcache) но для PHP < 7.0 лучше всего xcache
    Один сайт на WP с плагинами и темой требует примерно 32 Мб памяти выделенной для кеша опкода

    * Установить nginx как реверс прокси, изменить порт апача на 8080 например, а на 80 порт повесить nginx с проксированием всего и вся на 8080
    Руководств в сети полно, занимает это все 5-10 минут, проблем не вылезает, а результат очень хороший по ускорению сайта получается, даже при полном реверс-проксировании на апач, без статики итп.

    * Обязательно по логам выявить источник такой активности, возможно вас взломали и залили какой-нибудь дорвей, возможно еще что-то

    Модератор Yui

    (@fierevere)

    ゆい

    висит у вас в основном из за того что, при пике нагрузке запускаются много рабочих процессов apache, которые сьедают всю память, сервер начинает свапиться, а диск не быстрый, поэтому процессор встает в режим ожидания дискового io 95%, в то время как непосредственно генерация страниц — менее 5%

    в логе ошибок у вас скорее всего просто проблема таймаута запроса
    анализировать стоит access.log на предмет того куда у вас такой «активный доступ» идет

    Ммм…
    Большое вам спасибо за развернутый ответ.
    Но с апгрейдом железа есть определённые финансовые проблемы…

    И я всё таки не понимаю — помимо сайта на WP, пусть и самого посещаемого, на сервере у меня имеется ещё пара сайтов на других движках, игровой сервер Counter-Strike, фтп для внутрених нужд и всё это остальное работает нормально, пока нет магической папочки includes\widgets в веб-папке с блогом, а вот как только открываешь доступ к ней — всё зависает. Т.е. дело тут не в кол-ве посетителей блога, ведь не могут они сразу толпой ринуться в ту же секунду, а в каком-то подломе его кем-то… Но если я код весь сменил на последнюю версию, может в БД где-то что-то запрятано, я в разных хаках и эксплойтах не силён.

    Модератор Yui

    (@fierevere)

    ゆい

    в wp-includes/widgets просто код вынесли отдельно, он был уже в 4.4
    он не должен создавать проблем, хотя на (in order execution) атоме возможны некоторые странности
    у меня пока был такой, словила на нем несколько странных вещей, которые нигде больше не воспроизводились, например не собирался boost, просто висла сборка

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

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

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Блог на WP роняет сервер» закрыта для новых ответов.