LEOnidUKG

LEOnidUKG
Рейтинг
1784
Регистрация
25.11.2006
Должность
PHP
Интересы
Программирование
80.0.3987.122 проблему с баннером решает

В смысле решает?! Ничего он не решает, просто баннеры не всегда отображаются.

Пришло время рассказать интересную историю оптимизации. А то все думаю, что это так просто, вот ошибка, исправь. И всё это занимает 10 минут. Увы, но это не так.

Дано: Выделенный сервер, достаточно мощный. 260 сайтов на WordPress.

Проблема: Каждые 3-4 часа нагрузка уходит «в космос», держится там около минут 30, и потом очень медленно на спад. Был переезд с другого сервера, это не помогло.

День 1

Действительно на графике в ISP5 отлично видны пики нагрузки. Начинаю изучать пока нет нагрузки. Все WP обновлены. Посмотрел конфиги сервера, вполне всё нормально. Был обновлён PHP 7.0 до версии 7.3, также развязаны лимиты nginx и MySQL т.к. памяти у нас 64 ГБ, чего уж там экономить для 260 сайтов то.

Немного подождав, пришла волна! Apache забивается весь, а увеличение лимита клиентов, не играет роли, хоть 250 хоть 500, всё забито. HDD «горит», SSD отдельный с MySQL спит спокойно.

Начинаю анализировать, кто же долбиться то в таком количество? Ба! Так это же боты в огромном количестве, всякие переборщики паролей, спамеры в комментарии и т.д. Плюс ко всему ещё поисковые роботы хотят индексировать сайты.

Всё ясно, устраивают серверу на HDD просто ДДОС атаку. 260 сайтов на WP и все кому не лень сканируют их на дырки.

Решение: блокируем плохие подсети, ставим на сайты кэш систему на всякий случай и блокируем REST-API

Нагрузка начинает спадать, оставляем на сутки

День 2

Ничего не изменилось. Опять нагрузка, возможно, график чуть изменился, но суть прежняя. Может быть остались боты? Да нет, ботов очень мало. Анализирую пакеты TCP, ничего такого нет. Но что-то сервер ожидает и не даёт клиентам информацию. Учитывая, что нагрузка спала, опять курим бамбук… Случайно выясняется, что все 260 сайтов работают под одним пользователем MySQL, ну для удобства было сделано, а в настройках лимиты выставлены 80 подключений на 1 пользователя! Всё ясно, приходят много подключений и пока они не отработают, MySQL не даст новых подключений, вот вам очередь. Увеличивая лимит Apache, мы только делаем хуже!

Решение: увеличиваем лимиты для 1 пользователя в MySQL.

Оставляем всё это на ночь.

День 3

Ничего не изменилось.

Да быть такого не может. Жду волну нагрузки и начинаю strace процессов Apache, что же они делают. Замечаю, что вызывается биржа Sape. ОУ! Действительно на всех сайтах стоит код биржи. Файл старый 2016 года, настройки там по умолчанию.

Так постойте-ка, там кэш на 1 час, запрос через обычный file_get_contents, который ожидает 60 секунд, и вся работа с 1 файлом (он же БД) идёт.

Теперь давайте представим алгоритм работы в данном случаи. В какой-то момент приходят боты, юзеры и т.д. и попадают в момент, когда нужно обновить кэш SAPE. Учитывая, что все сайты на 1 IP, биржа просто перестаёт отвечать на такое количество запросов. У нас timeout 60 секунд и +10 минут к времени НЕ обновления кэша в случаи timeout.

Очередь моментально вырастает, все бьются за 1 файл БД, чтобы сделать пометку на одном сайте, а в потом такая же очередь выстраивается к другому файлу на другом сайте.

Решение: берём новый файл sape.php, в нём реализовано многофайловое хранения ссылок (АГА, значит был такой баг у кого-то). Выставляем в нём кэш 12 часов и режим работы с CURL с 6 секундным timeout. Меняем на всех сайтах и ждём.

День 4

Никакой нагрузки. Всё работает штатно.

Вот такая вот история, спасибо, что дочитали.

sincera:
Пообщался с поддержкой РТ, пишут что я один такой дурак и что больше к ним никто не обращался с данной проблемой, писал им в ВК. Может стоит всем у кого проблема есть отписать им и скриншоты приложить сюда?

Дыг правильно, сегодняшней смене только про сбои орут т.к. сегодня РТ весь день умирает:

https://downdetector.ru/ne-rabotaet/rostelekom/

ISP там и там присутствует. есть SSH доступ

ну так выберите на новом хостере, импорт пользователя в ISP5. Всё само перенесётся.

Sitealert:
Да я не про то. Хотелось бы как-то у себя на компе это отловить. Я на Ростелекоме сижу уже не помню сколько лет, но ни разу такого не наблюдал. Вот мне и интересно было бы взглянуть, просто любопытно. Одно дело, когда кто-то скрины выкладывает, а другое дело – самому взглянуть.

На моей тестовой странице, не проявляется в консоле?

Sitealert:
Как бы мне посмотреть, что там Ростелеком подсовывает. Даже интересно стало. Мне почему-то ничего не показывает, зараза. :(

тут уже выкладывали код: /ru/forum/comment/16358494

---------- Добавлено 24.02.2020 в 17:56 ----------

ЛОЛ! http://joyreactor.cc/post/4246541

Реклама на весь экран!

можно через jQuery сторонние скрипты из DOM вырезать:

Да нету в DOM никаких сторонних скриптов. Вы наверное не поняли, что делает провайдер.

Там где локалхост через прова и редирект вставляется в страницу?

Там он работал на локал хосте, а грузил карту гугла, вот карту гугла и подменил ему провайдер.

Ещё интересная вещь. Если вы работаете через Internet Explorer ИЛИ какую-нибудь программу, которая юзает IE модуль, а это часто бывает в программах. То такой сайт тупо зависнет т.к. IE не может прожувать эту рекламу.

Коротко говорят, теперь работать через ростелеком и IE не возможно.

SeVlad:
Да бред как мне кацца.

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

---------- Добавлено 24.02.2020 в 14:43 ----------

Для самых УПОРОТЫХ ещё раз в картинках. Тестовая страница:

http://yourcommentit.ru/textjs.html

У меня в файле host стоит блокировка, да же адблок их блокирует все эти домены, что я получаю:

Сайт НЕ может загрузить JQ библиотеку и сайт ломается:

SeVlad:


Знаешь, я очень не уверен, что именно подменяют. И тем более все. Вставляют свои - это да. Но это совсем другое дело.

Вставляют свой код в чужие популярные библиотеки. А не это ли подмена? Берут библиотеку, прогоняют через себя, в конце внедряется код загрузки рекламы и отдают обратно клиенту.

Повторю вкратце: не надо самому быть юристом. Надо найти и скинуться юристу, который этим бы занялся.

А т.е. юристы от этого не страдают, а сами ждут, когда же им скинут статьи и бабки наверное занесут 🍿

Всего: 31599