Jump to content
Sign in to follow this  
alinalessioYandex

Повышенная нагрузка на сервер. Как лечить?

Recommended Posts

Привет всем.
С недавнего времени сайт заблокировал хостинг (Хостинг центр - hc.ru), за повышенную нагрузку на сервер. Переехал на хостинг timeweb и взял тариф побольше - Миллениум. Там тоже с первого дня полетели письма о превышении нагрузки на ресурсы сервера, а именно нагрузка на MySQL и нагрузка на процессор. 
 
Сразу скажу, что точно такой же сайт, только под другим шаблоном благополучно работает на хостинге 1GB.ru. У них одинаковое количество продуктов и сами продукты одни и те же. Разница только в шаблоне.
 
 
1. Сначала я подумал, что на сайте вредоносный код и чтобы его устранить удалил всю файловую систему и установил чистый движок. Потом импортировал базу данных и залил картинки.
 
 
Нагрузка на сервер не изменилась. Все тоже самое.
 
2. Потом подумал, что может в базе данных косяк. На "чистую" базу данных, которая создается при установке OpenCart вставлял таблицы с продуктами, категории и прочее, что нужно на сайте.
 
Нагрузка та же.
 
3. Скачал работающий сайт, который на 1GB.ru и который абсолютно идентичен по категориям и товарам. Даже оставил тот же шаблон, только перекрасил заголовки и другие детали привел в тот вид, который должен иметь этот сайт. Залил на timeweb и в тот же день заблокировали за превышение, так как предупреждали, а я якобы ничего не сделал. Перезалил на hc.ru и тут за повышенную нагрузку на MySQL заблокировали, причем в тот же день.
 
 
ВОПРОСЫ:
1. Почему возникла эта проблема с MySQL? Ведь раньше ее не было, сайту около двух лет и все было в порядке.
 
2. Если проблема в файлах или в базе, то почему замена и того и другого с работающего сайта не решило проблему?
 
3. Как в конце концов устранить проблему?
 
Вот что прислали с хостинга, когда заблокировали в последний раз. Может это прояснит ситуацию? (извиняюсь, но не нашел Спойлер чтобы спрятать длинный код). Если код скопировать в Notepad++ то там не такая каша, а перенос строки и получается что одна и та же строчка повторяется, которая заканчивается разными цифрами.

 



18541599 burvoda7_radar fe115.hc.ru:21481 wwwburvoda72ru_radar Query 2 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '81')
18541745 burvoda7_radar fe115.hc.ru:22042 wwwburvoda72ru_radar Query 2 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '80')
18541766 burvoda7_radar fe115.hc.ru:22137 wwwburvoda72ru_radar Query 1 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '123')
18541793 burvoda7_radar fe115.hc.ru:22286 wwwburvoda72ru_radar Query 2 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '91')
18541839 burvoda7_radar fe115.hc.ru:22511 wwwburvoda72ru_radar Query 1 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '106')
18541841 burvoda7_radar fe115.hc.ru:22521 wwwburvoda72ru_radar Query 1 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '70')
18542265 burvoda7_radar fe115.hc.ru:24420 wwwburvoda72ru_radar Query 0 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '145')
18542275 burvoda7_radar fe115.hc.ru:24445 wwwburvoda72ru_radar Query 1 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '85')
18542316 burvoda7_radar fe115.hc.ru:24596 wwwburvoda72ru_radar Query 1 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '94')
18542429 burvoda7_radar fe115.hc.ru:25175 wwwburvoda72ru_radar Query 0 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '64')
18542498 burvoda7_radar fe115.hc.ru:25671 wwwburvoda72ru_radar Query 0 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '116')
18542526 burvoda7_radar fe115.hc.ru:25877 wwwburvoda72ru_radar Query 1 Sending data SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '135')

 
Платформа: Ostore 1.5.1.3
Товаров: 2419 шт.

Share this post


Link to post
Share on other sites

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

2. Количество посетителей на обоих сайтах одинаковое?

Share this post


Link to post
Share on other sites

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

2. Количество посетителей на обоих сайтах одинаковое?

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

 

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

Share this post


Link to post
Share on other sites

Кто-то может разъяснить на что намекает этот лог ошибок, который мне прислал хостинг?

Share this post


Link to post
Share on other sites

попробуйте отключить счетчик товаров в хедере. Вроде в 1,5,1,3 - этой настройки в админке еще нет, придется подправить файлы http://forum.opencart.com/viewtopic.php?t=33929#p166221

Share this post


Link to post
Share on other sites

Переезжайте на domenam.ru - в 10 раз больше товаров, чем у вас, 500-600 хостов/сутки, и пока (тьфу-тьфу-тьфу) никаких жалоб и тормозов  :-)

Share this post


Link to post
Share on other sites

попробуйте отключить счетчик товаров в хедере. Вроде в 1,5,1,3 - этой настройки в админке еще нет, придется подправить файлы http://forum.opencart.com/viewtopic.php?t=33929#p166221

В админку не пробиться. Сайт заблокирован. Сейчас попробую на локалке и залью в хост.

 

Есть еще предложения?

Share this post


Link to post
Share on other sites

Переезжайте на domenam.ru - в 10 раз больше товаров, чем у вас, 500-600 хитов/сутки, и пока (тьфу-тьфу-тьфу) никаких жалоб и тормозов  :-)

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

Share this post


Link to post
Share on other sites

попробуйте отключить счетчик товаров в хедере. Вроде в 1,5,1,3 - этой настройки в админке еще нет, придется подправить файлы http://forum.opencart.com/viewtopic.php?t=33929#p166221

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

 

Вот что пишет хостинг hc.ru по поводу перегрузки на базу данных:

 

Запросы к БД

Медленные запросы к базам данных за сутки (кол-во запросов * время их выполнения)

1244320 из 50000 

 

Т.е. тут превышение в разы! Откуда взялось??? Как исправить? Кто-нибудь может расшифровать лог ошибок, который в первом сообщении этой ветки?

Share this post


Link to post
Share on other sites

1. Записываете лог медленных запросов (установите модуль от freelancer)

2. Смотрите, какие запросы там присутствуют.

3. Ищете, где такие запросы присутствуют в коде магазина.

4. Оптимизируете запросы.

 

В логе в первом сообщении содержатся запросы, которые подсчитывают кол-во товаров по категориям. В OpenCart до 1.5.5 их много в меню.

Share this post


Link to post
Share on other sites

Счетчик и в категории и в меню отрубили?

Share this post


Link to post
Share on other sites

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

 

------------------------------------------------------------------------------

Спустя несколько минут.

 

Прошу прощения. Тут http://forum.opencart.com/viewtopic.php?t=33929#p166221 показали как в header.php убрать счетчики. Сначала не заметил. Теперь убрал счетчики и с header.php т.е. из верхнего горизонтального меню, как я понимаю. Теперь понаблюдаю что будет дальше.

 

Спасибо.

 

О результатах обязательно отпишусь.

Share this post


Link to post
Share on other sites

Вчера я удалил счетчики с header. Еще не прошло полных суток. Результаты нагрузки ужасают:

 

 

Запросы к БД
Медленные запросы к базам данных за сутки (кол-во запросов * время их выполнения)
6331060 из 50000

 

Т.е. еще больше чем было вчера. Причем во много раз.

 

Отличие сайтов работающего от проблемного в том, что на проблемном на главной странице есть верхнее, горизонтальное меню, модуль рекомендуемые (featured), модуль акции (special)

 

Поиском нашел, что product_total есть и в модуле акций (special), но там не так как в модуле категорий. Кто скажет это может вызывать такие нагрузки и как удалить product_total из модуля special.

 

Спасибо.

Share this post


Link to post
Share on other sites

так в чем проблема отключить по очереди все модули и найти "слабое" звено?

PS Я думаю дело не в них, но мало ли, вдруг найдете причину, а в худшем случае исключите влияние модулей

Share this post


Link to post
Share on other sites

так в чем проблема отключить по очереди все модули и найти "слабое" звено?

Попробую. Как-то сам до этого не додумался. )) 

Share this post


Link to post
Share on other sites

Вчера отключил модуль "специальные". Сегодня нагрузки шокируют.

 

Процессор
Использование процессора за последние 7 суток (мин)
524.36 из 500   Запросы к БД
Медленные запросы к базам данных за сутки (кол-во запросов * время их выполнения)
90766620 из 50000

 

Теперь уже почти 100 миллионов из 50 тысяч! Похоже снова отключат. Помогите пожалуйста. Уже не знаю что и думать.

 

Возможно ли такую ситуацию спровоцировать не внутри сайта, а извне? Т.е. если злоумышленник намерен довести сайт до отключения, то может ли он при помощи каких либо инструментов создавать запросы к БД? Даже не знаю что и думать. Буду рад любой помощи.

Share this post


Link to post
Share on other sites

Теоретически можно, но вы ведь видите медленные запросы, вот и посмотрите что там такое.

Как я бы действовал, если бы хотел вам повесить сайт - большинство используют стандартные генераторы sitemap, имеющие везде одинаковые адреса /index.php?route=feed/google_sitemap

Я бы запустил одновременно несколько таких генераций и легко бы все повесил, потому что это процессы очень прожорливые, особенно когда товаров не 100-200, а больше 1000

Share this post


Link to post
Share on other sites

Статистика запросов: со времени запуска, на сервер было отослано запросов - 2,557,692,410.

Эм.. так же ужаснулся своей статистике)))) это на тестовом сайте за 2 недели без посетителей. Бред? )))

Share this post


Link to post
Share on other sites

Теоретически можно, но вы ведь видите медленные запросы, вот и посмотрите что там такое.

Как я бы действовал, если бы хотел вам повесить сайт - большинство используют стандартные генераторы sitemap, имеющие везде одинаковые адреса /index.php?route=feed/google_sitemap

Я бы запустил одновременно несколько таких генераций и легко бы все повесил, потому что это процессы очень прожорливые, особенно когда товаров не 100-200, а больше 1000

1. Запросил у хостера  лог медленных запросов. Когда пришлет, посмотрю на какие запросы еще обратить внимание.

 

2. Отключил дополнения/каналы продвижения/Google Sitemap . Т.е. сейчас карта сайта у меня не доступна? Отключив Google Sitemap я обезопасил себя от сценария, который вы описали или нужны еще какие-то манипуляции, чтобы исключить возможность использования злоумышленниками сценария, который вы описали?

 

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

 

Нагрузки за 22.04.2013

 

Процессор

Использование процессора за последние 7 суток (мин)

685.73 из 500

Запросы к БД

Медленные запросы к базам данных за сутки (кол-во запросов * время их выполнения)

10753420 из 50000

Share this post


Link to post
Share on other sites

Есть решение? Сайт хостер снова отключил. Я в отчаянии. Помогите вернуть сайт к жизни.

Share this post


Link to post
Share on other sites

Есть решение? Сайт хостер снова отключил. Я в отчаянии. Помогите вернуть сайт к жизни.

Попробуй вот это. Разработка не моя, найдено здесь, на форуме.

Share this post


Link to post
Share on other sites

Была подобная ситуация. Даже темку на форуме создавал. Хостер был тотже IHC))

 

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

С помощью шаманства мне удалось решить её. Каким образом конкретно я сам не понял но мысли и действия примерно такие:

 

1.Там где то в базе что то слетает. Пробуйте восстановить\пересоздать всю базу или вычисляйте таблицы\запросы с каких идет проблема. 

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

3. Апгрейдте  движок. с 1.5.1.3  на 4.1- я так подозреваю что такая трабла имела места быть только в  1.5.1.3 т.к. ни до не после я таких проблем не встречал.

Share this post


Link to post
Share on other sites

Спасибо за инструкции. С завтрашнего дня буду пробовать.

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

Share this post


Link to post
Share on other sites

alinalessioYandex сказал(а) 13 Май 2013 - 21:13:

Дайте пожалуйста ссылку на подробное описание, как правильно обновить движок.

opencart-*.zip: upgrade.txt

ocstore-*.zip: UPGRADE.txt

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.