Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Недавно достался мне сервер с CMS Simpla на борту, а так же небезызвестной cPanel :/ :(

 

Кто его админил и дорабатывал - тёмный лес-сломай ногу. Связи с этими людьми нет от слова совсем.

Глубокими знаниями в области данной CMS не обладаю да и PHP, туда же.

 

В итоге столкнулся со следующей проблемой - раз в несколько часов некий процесс(иногда их два) PHP выносят 8 ядерный CPU в 100% от чего виснут nginx+apache2 наглушняк. Поочередно от них получаем ошибку 503 мол сервис недоступен. На практике такое как правило бывает когда отваливается БД или бэкэнд.

 

Естественно я полез в error_log и вот что нашёл:

 

PHP Warning:  MySQL server has gone away in /home/SITENAME/public_html/api/Database.php on line 150
PHP Warning:  MySQL server has gone away [SELECT b.id, b.url, b.name, b.annotation, b.text,
       b.meta_title, b.meta_keywords, b.meta_description, b.visible,
       b.date
       FROM s_blog b WHERE 1  AND b.visible = 1
       ORDER BY date DESC, id DESC  LIMIT 0, 5 ] in /home/SITENAME/public_html/api/Database.php on line 105

и сразу после:

 

PHP Fatal error:  Uncaught exception 'SmartyCompilerException' with message 'Syntax Error in template "simpla/design/html/subscribes.tpl"  on line 25 "{subscribes|var_dump}" unknown tag "subscribes"' in /home/SITENAME/public_html/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php:431
Stack trace:
#0 /home/SITENAME/public_html/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php(253): Smarty_Internal_TemplateCompilerBase->trigger_template_error('unknown tag "su...', 25)
#1 /home/SITENAME/public_html/Smarty/libs/sysplugins/smarty_internal_templateparser.php(2328): Smarty_Internal_TemplateCompilerBase->compileTag('subscribes', Array)
#2 /home/SITENAME/public_html/Smarty/libs/sysplugins/smarty_internal_templateparser.php(2812): Smarty_Internal_Templateparser->yy_r38()
#3 /home/SITENAME/public_html/Smarty/libs/sysplugins/smarty_internal_templateparser.php(2912): Smarty_Internal_Templateparser->yy_reduce(38)
#4 /home/SITENAME/public_html/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php(51): Smarty_ in /home/SITENAME/public_html/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 431
PHP Fatal error:  Uncaught exception 'SmartyCompilerException' with message 'Syntax Error in template "simpla/design/html/subscribes.tpl"  on line 25 "{subscribes|var_dump}" unknown tag "subscribes"' in /home/SITENAME/public_html/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php:431 

 

т.е. отвалилась БД.

Пошёл смотреть файлы config/config.php накопал пользователя БД и проверил его PRIVILEGES - всё огонь, логинимся, права есть. (ещё бы иначе CMS вобще не работала бы).

 

 

файлик Database.php on line 105 выдал вот такой вот блок кода:

 

Собственно line 105 это там где triger_error, ну ок думаю не смог подключиться к БД, но почему?

 

        public function results($field = null)
        {
                $results = array();
                if(!$this->res_id)
                {
                        trigger_error(mysql_error($this->link), E_USER_WARNING);
                        return false;
                }

                if($this->num_rows() == 0)
                        return array();

                while($row = mysql_fetch_object($this->res_id))
                {
                        if(!empty($field) && isset($row->$field))
                                array_push($results, $row->$field);
                        else
                                array_push($results, $row);
                }
                return $results;
        }

 

Пошёл смотреть конфиг my.cnf но увы и ах лога для обычных запросов и ошибок там включено не было, а были только slow queries абракадабра вот такая:

 

Time: 180101 19:03:31
# User@Host: USERNAME[USERNAME] @ localhost []
# Query_time: 13.524118  Lock_time: 0.023002 Rows_sent: 127065  Rows_examined: 575712
SET timestamp=1514833411;
SELECT v.id, v.product_id , v.price, v.stock_price, NULLIF(v.compare_price, 0) as compare_price, v.sku, IFNULL(v.stock, '100') as stock, (v.stock IS NULL) as infinity, v.name, v.attachment, v.position
                                        FROM s_variants AS v
                                        WHERE
                                        1
                                        AND v.product_id in('30558','30559','27008','88264','101996','101998','101999','102000','102001','102002','102003','101995','51634','51941','51940','101989','101990','101991','101988','56944','569
45','56946','56947','56948','56949','56950','56951','56952','56953','56954','113637','113638','113639','113640','113641','113642','113643','113644','113645','113646','11318','11319','11320','11321','11322','11323','11324','11325','11326
','11327','11328','11330','11331','11332','11333','11334','11335','11339','67153','101993','101997','110452','110469','110415','110423','110421','110441','110431','110435','110463','110449','110433','110418','110465','110430','110443','
110417','110414','110424','110478','110439','110479','110450','110460','110445','110473','110462','110447','110477','110454','110455','110468','110470','110472','110419','110422','110420','110440','110442','110461','110428','110416','11
0429','110453','110457','110464','110466','110459','110451','110458','110434','110471','110438','110426','110474','110437','110476','110446','110427','110448','110425','110475','110436','110444','110456','110467','110432','83886','92284
','124670','124671','124672','101341','92283','92282','92281','92287','92285','92286','124673','124669','123484','123606','123607','123608','123609','92280','92279','85544','105752','105762','111220','111222','111225','111226','111227',
'111228','111229','111230','111231','113805','113806','113807','115409','115410','115411','115412','115413','115414','115415','115416'
 и далее бесчисленное количество этих самых ID

 

я так понимаю что это выгрузка товаров куда-то.

но во всяких там crontab от любого пользователя(root, adm, ftp, www-data, etc) я там ничего подобного не нашёл.

 

Прошу опытных гуру что нибудь по этому поводу сказать и вобще куда копать, если нужны логи или что-то ещё - предоставлю. Заранее спасибо.

Изменено пользователем Intarr
Ссылка на сообщение
Поделиться на другие сайты

Судя по названию шаблона в админке, это рассылка (subscribes). Такого в оригинальном движке нет, значит дорабатывали.

 

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

 

Учитывая то, что виснет периодически - все таки отрабатывает крон, если нет заданий в панели (они и не обязательны, т.к. запуск можно сделать по ссылке ресурсами из вне: cron online и т.д), то поищите в корне или папка файл, который теоретически может запускать рассылку.

Изменено пользователем fancy-studio
Ссылка на сообщение
Поделиться на другие сайты

Найдите {subscribes|var_dump} в шаблонах и удалите, это нужно для дебага, + криворукие кодеры забыли указать $ то бишь {$subscribes|var_dump} ну или на крайняк {$subscribes|print_r}.

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

Изменено пользователем Noxter
Ссылка на сообщение
Поделиться на другие сайты

Медленный запрос, похоже, идет из api/Variants.php.

Если не найдете источник ошибки простыми способами, то можно попробовать ставить в api/Variants.php свою запись в лог, чтобы видеть полный стек вызовов php.

Ссылка на сообщение
Поделиться на другие сайты

Всем большое спасибо за ответы.

Проблема оказалась в том что это были действительно большие запросы к БД, по кнопке показать все товары (несколько тысяч), а дисковая система сервера с БД даже не SAS, а просто SATA без рейда. Пока решили убрать показ всех товаров - отваливаться перестало.

 

Ваши ответы помогли мне найти ещё кучу того что надо было бы поправить.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...