Странная ошибка после переезда на 2.7.2

InstantCMS 2.X

Ошибки у некоторых пользователей при входе на сайт.

#1 15 июня 2017 в 20:15
После переноса базы на новый движок у многих пользователей возникает странная ошибка. Жалуются на долгое зависание и что-то про 30 секунд.
Глянул в логи сервера
[Thu Jun 15 19:54:57 2017] [error] [client 95.81.197.***] PHP Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/***/data/www/***.ru/system/core/database.php on line 0
[Thu Jun 15 19:55:44 2017] [error] [client 95.81.197.***] PHP Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/***/data/www/***.ru/system/core/database.php on line 0
[Thu Jun 15 19:56:35 2017] [error] [client 95.81.197.***] PHP Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/***/data/www/***.ru/system/core/database.php on line 0
[Thu Jun 15 19:58:10 2017] [error] [client 95.81.197.***] PHP Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/***/data/www/***.ru/system/core/database.php on line 212
Поднял старый сайт на поддомене на том же сервере — он доступен у всех.

Посмотрел, что в /system/core/database.php в 212-ой строке:
$trace = debug_backtrace();

В нулевой строке, само собой, ничего нет
Сервер перегружал, не помогает.
Что это такое может быть?
#2 15 июня 2017 в 21:49
а какое значение max_execution_time в php.ini на старом сервере?
сравните с новым.
ну конечно если у вас на старом сервере max_execution_time больше то всё равно это плохо, нужно разбиратся почему так долго скрипты выполняются.
#3 15 июня 2017 в 22:04
eoleg,
Сервер один. Я переезжал с Instantcms1.9 на Instantcms2.7.2
Старый (я не стал удалять старый сайт, похоже, что не зря) и новый сайты в соседних папках в каталоге www на одном сервере.
Старый работал и работает без проблем. По поводу нового пользователи завалили сообщениями об ошибках.
Вот теперь пишут, что периодически вылетает надпись "Ошибка создания комментария".
В логах по поводу комментариев ошибок нет.
Зато ошибками про system/core/database.php on line 0 лог забит под завязку.
#4 15 июня 2017 в 22:19


eoleg,
Сервер один. Я переезжал с Instantcms1.9 на Instantcms2.7.2
Старый (я не стал удалять старый сайт, похоже, что не зря) и новый сайты в соседних папках в каталоге www на одном сервере.
Старый работал и работает без проблем. По поводу нового пользователи завалили сообщениями об ошибках.
Вот теперь пишут, что периодически вылетает надпись "Ошибка создания комментария".
В логах по поводу комментариев ошибок нет.
Зато ошибками про system/core/database.php on line 0 лог забит под завязку.

Ris

базу данных нужно было новую создавать и было бы тебе счастье…
#5 15 июня 2017 в 22:27

базу данных нужно было новую создавать и было бы тебе счастье...

@Alexey80
Гениально! Кто-то сегодня по телевизору отвечал похожими ответами.
#6 16 июня 2017 в 12:18
Ris, похоже, что-то с настройками php и/или конфигурации сервера в целом. Какая версия php стоит?
#7 16 июня 2017 в 12:57

акая версия php стоит?

Fuze
Версия InstantCMS
2.7.2
Версия PHP
5.3.3
Лимит памяти
256 Мб
Макс. размер загрузки
20 Мб
Я тоже подозреваю, что тоже что-то с настройками сервера. Я в порядке эксперимента подключал nginx и fast-cgi, и даже сайт на Инстант 1.9 нормально работал.
Но как только я перетащил всё на 2.7.2 — начались нюансы. Я поотключал все нгинксы и прочее и оставил голый апач 2.2.2
Причем старый сайт, вынесенный на поддомен работает нормально. И новый почти у всех нормально работает, но некоторые пользователи не могут войти, им выдает ошибку Maximum execution time of 30 seconds exceeded.
Сам я такую ошибку тоже один раз видел с мобильника, пока возвращался с работы. Дома через вайфай опять стало все нормально и больше не повторялось.
Пробовал отключать memcached и кэширование вообще, все равно некоторые люди войти не могут.
Вот phpinfo:
instantcms.ru/users/files/download6576.html
#8 14 сентября 2017 в 21:39
Прошло три месяца, но проблема так и не решилась.
То и дело (раз в день стабильно) не могу зайти на сайт. И еще кто-то не может судя по логам сервера:
Эти пики стопроцентной загрузки — кто-то пытался зайти на сайт по кукису.
Проблема проявляется если попытаться зайти с компьютера, где хоть раз была при авторизации поставлена галка "запомнить меня".
Настройки сервера… поменял версию mySql, php менял дважды, пробовал менять режим работы php (модуль apache, CGI, голый nginx) — ничего не помогает.
Знакомым написал чтобы чистили куки, периодически очищаю таблицу cms_users_auth_tokens (многие пользователи считают, что сайт давно умер, так как не могут войти).

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

Пример логов при моей сегодняшней попытке зайти на сайт:
[Thu Sep 14 19:29:28 2017] [warn] [client 109.252.**.**] Timeout waiting for output from CGI script /var/www/php-bin-isp-php71/***/php
[Thu Sep 14 19:29:28 2017] [error] [client 109.252.**.**] Script timed out before returning headers: php
[Thu Sep 14 19:29:58 2017] [warn] [client 109.252.**.**] Timeout waiting for output from CGI script /var/www/php-bin-isp-php71/***/php
[Thu Sep 14 19:29:58 2017] [error] [client 109.252.**.**] Script timed out before returning headers: php
[Thu Sep 14 19:30:08 2017] [warn] [client 109.252.**.**] Timeout waiting for output from CGI script /var/www/php-bin-isp-php71/***/php
[Thu Sep 14 19:30:08 2017] [error] [client 109.252.**.**] Script timed out before returning headers: php
2017/09/14 19:30:17 [error] 23619#23619: *356833 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 109.252.**.**, server: *****.ru, request: "GET /admin HTTP/1.1", upstream: "127.0.0.1:8080/admin", host: "*****.ru"
[Thu Sep 14 19:30:17 2017] [warn] [client 109.252.**.**] Timeout waiting for output from CGI script /var/www/php-bin-isp-php71/***/php
[Thu Sep 14 19:30:17 2017] [error] [client 109.252.**.**] Script timed out before returning headers: php
На локальном сервере копия сайта загружается тоже довольно долго, но тут 1500 мега оперативки.
Похоже, что проблема в огромном количестве комментариев (около миллиона), но почему проявляется только при авторизации по кукису — непонятно.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Пока писал пришла мысль уменьшить memory_limit до 128М на локальном сервере.
Вот результат первой загрузки сайта:
Fatal error: Maximum execution time of 180 seconds exceeded in D:\OSPanel\domains\BACK280.tes\system\core\database.php on line 232.
#9 15 сентября 2017 в 00:25

Похоже, что проблема в огромном количестве комментариев (около миллиона), но почему проявляется только при авторизации по кукису — непонятно.

Ris
Какое-то подтверждение теории есть или пальцем в небо? — попробуйте настроить логирование медленных запросов и посмотреть что будет в логах — описание.

Можно посмотреть размер таблиц cms_users_auth_tokens и cms_users — при авторизации по токену запрос к ним идет, а с комментами сложно связать это…
#10 15 сентября 2017 в 00:51

Похоже, что проблема в огромном количестве комментариев (около миллиона), но почему проявляется только при авторизации по кукису — непонятно.

Ris

Ris, еще вариант. Может и правда комменты… Отключите в админке событие user_login для компонента Комментарии
#11 15 сентября 2017 в 00:54

Можно посмотреть размер таблиц cms_users_auth_tokens и cms_users

@SmartControl
Ну можно в phpmyadmin посмотреть время выполнения запросов в таблицах и если гдето тормоза то попробовать может индексы добавить или как то оптимизировать Серверные переменные и настройки
#12 15 сентября 2017 в 08:37

Какое-то подтверждение теории есть или пальцем в небо? — попробуйте настроить логирование медленных запросов и посмотреть что будет в логах

@SmartControl
Пальцем в небо на самом деле. Просто в остальных таблицах строк не так много, максимум 130000.
Логирование медленных запросов настраивать пробовал. Эта штука как-то странно работает. Даже если ставить long_query_time=20 оно все равно сыплет в лог все подряд. А сайт-то принципе довольно шустро работает. Если не учитывать зависание с авторизацией по кукису, то самый долгий запрос при заходе в профиль пользователя:
  1. /system/controllers/comments/model.php => 260 => modelComments->getCommentsCount()
  2. SELECT COUNT( i.id ) AS COUNT
  3. FROM cms_comments i
  4. WHERE (i.user_id = '40') AND (i.is_deleted IS NULL)
  5. Время выполнения 1.48362 секунд

Отключите в админке событие user_login для компонента Комментарии

@SmartControl
А вот это мысль очень интересная! Потому что заметил, что зависание при входе наблюдается в случаях долгого отсутствия на сайте, но достаточно зайти с другого компа, где не запомнены кукисы (даже с другого айпи) — сразу нормально входит и на том компе, где зависало.
А в хуках user_login в компонентах комментарии и форум (от Loadыря) написано:
  1. // Если новых комментариев на отслеживаемых страницах не появлялось
  2. // то тоже выходим
  3. $counts = $this->model->getTrackedNewCounts($user['id'], $user['date_log']);
  4.  
  5. // новые сообщения на форуме
  6. $counts = $this->model->getNewThreadsCounts($user['id'], $user['date_log']);
То есть, есть зависимость от $user['date_log'], а стоит обновить дату последней авторизации — авторизует и по кукису без проблем.

Теперь дождусь зависания, зайду в phpmyadmin и попробую поотключать эти два хука по очереди. О
О результатах эксперимента отпишусь.
#13 15 сентября 2017 в 11:08

Эта штука как-то странно работает. Даже если ставить long_query_time=20 оно все равно сыплет в лог все подряд.

Ris
А потому что у вас один запрос вешает весь сервак и все остальные за ним тоже получаются "медленными") Там же выводится время выполнения.

А в хуках user_login в компонентах комментарии и форум (от Loadыря) написано:

Ris
Да, я посмотрел это… Там при авторизации вызывается хук для комментов, вот и связка с вашим предположением. Скорее всего так и есть. Но это вызывается всегда, не только при авторизации по хукам. При простой авторизации по логину-паролю тоже этот хук вызывается.

Теперь дождусь зависания, зайду в phpmyadmin и попробую поотключать эти два хука по очереди.


А зачем в phpmyadmin? — это же можно делать из админки. Компоненты->Управление событиями и там отфильтруйте по колонке Компонент->Комментарии. Или просто сразу по названию хука user_login
#14 15 сентября 2017 в 11:11

А зачем в phpmyadmin? — это же можно делать из админки.

@SmartControl
Для чистоты эксперимента.
Ведь если зайти под своим логином (все равно откуда) — сайт сразу развешивается.
================================================================
А вот и момент истины!
Возвращаюсь с обеда и не могу зайти на сайт. В режиме инкогнито (ну то есть без авторизации) сайт доступен.
Захожу в phpmyadmin, в таблице cms_events отключаю user_login в комментариях — сайт не загружается. Отключаю user_login в admin — сайт не загружается. Отключаю user_login в forum — бинго, мгновенная загрузка!
Пойду писать Loadырю привет…
#15 15 сентября 2017 в 16:57

Пойду писать Loadырю привет...

Ris
И вам привет laugh
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.