Сайт находится на VPS, с nginx на фронте php-CGI. Постоянный тайм-аут 504,причина в основом посещение ботов- гугл, бинг и т.д. Плохих ботов отсек в .htaccess .

Накрутив все возможные настройки в httpd.conf TimeOut 120 ,вместо 30 , в php.ini max_execution_time 180 , результат отрицательный.

 

В настройках mysql, кто то до меня уже настроил в my.cnf запись медленных запросов в лог , по пути /var/log/slow_guery.log

log_slow_queries=/var/log/slow_query.log
long_query_time=1

И в логе медленных запросов я нашел запрос к таблице с товарами с лимитом в 2000 записи

ORDER BY `jos_vm_product_category_xref`.`product_list` ASC LIMIT 0, 2000;

# Query_time: 14.255449

По поиску в файлах, я нашел два файла по пути /administrator/components/com_virtuemart/classes/

pc_html.php строка 445

// This is necessary, because so much products are difficult to handle!
$q .= ' LIMIT 0, 2000';

Значение изменил на 200. И аналогично в файле pc_product.php , строка 1332

// This is necessary, because so much products are difficult to handle!
$q .= ' LIMIT 0, 200';

И аналогично в файле pc_product.php , строка 1332

function get_neighbor_products( $product_id ) {
global $perm, $orderby, $my, $auth, $keyword, $DescOrderBy, $limit, $limitstart, $search_limiter, $search_op,
$category_id, $manufacturer_id, $vm_mainframe, $vmInputFilter, $product_type_id, $keyword1, $keyword2;
$limit = 200;
$limitstart = 0;

Еще высмотрел,что Virtuemart перестает работать,если задать выборку всех товаров. Ограничил количество товаров в запросе, в точке входа в компонент /components/com_virtuemart/virtuemart.php
$limit = JRequest::getVar('limit');
if($limit > 1053)
$mainframe->redirect('index.php');

Если в запросе запрос больше чем 1053 товаров, то будет срабатывать редирект на главную страницу сайта.

Добавить комментарий


Защитный код
Обновить