Здравствуйте! Есть обмен между УТ 11.1.2.18 и сайтом, периодически обмен подвисает или выдает ошибку вида: Фоновый обмен В том числе для каталога Основной каталог товаров: 21.01.2014 10:58:40 Выгрузка на сайт завершилась с ошибками. 21.01.2014 10:58:40 Завершена выгрузка товаров |
|
Ошибку вам показал nginx. Он не смог за установленное время дождаться ответа от PHP. Смотрите в лог ошибок nginx Смотрите в лог апача: access_log и error_log Скорее всего окажется, что какой-то шаг обмена не вернул ответ за 5 или 10 минут. И nginx показал ошибку. Ищите в обмене с 1С какой-нибудь медленный обработчик. Или можете в nginx увеличить максимальное время ожидания ответа. |
|
Спасибо за ответ! В данный момент выскакивает другая ошибка Невосстановимая ошибка http://v8.1c.ru/8.2/uobjects }v В том числе для каталога Основной каталог товаров: Ошибки в процессе выгрузки каталога Основной каталог товаров:Строка XML «ркШбшExif почитал на форумах пишут что возможно из-за недопустимого знака в какой либо номенклатуре, но как узнать в какой номен. если ее очень много. |
|
Вы можете выгружать не на сайт, а в каталог на диске. Смотрите в настройках обмена с 1С. Вы не пишите, где происходит ошибка. В какой части обмена? 1С закачала архив на сайт успешно? |
|
Обмен вообще висит т.е. имеет статус «Задача выполняется» и так может целый день провисеть и ничего не выгружать, а данная ошибка возникает если я хочу посмотреть детально события выгрузки данных в узлах обмена с сайтами. |
|
Файлы архива лежат в /upload/1c_catalog. Они пришли? Если пришли, советую модуль Продвинутый обмен с 1С . Там можно включить лог-файл и Живой лог, чтобы посмотреть, что у вас. Может обмен идет, но только очень медленно. А может и дошел до конца. —— Если файлы выгрузки так и не пришли в /upload/1c_catalog, тогда ошибка точно в 1С. Надо разбираться с 1С. Писать в техподдержку Битриксу ——- На одном из проектов у нас была проблема с открытием отчетов в 1С. Мы не видели, как прошел обмен, потому что была какая-то ошибка XML с кракозяброй. Но сейчас у нас стоит новое дополнение для 11.1.2.22 и ошибка XML не возникает. Можете, как вариант, создать новую настройку обмена. Но нет гарантии, что ошибка XML не повторится. |
|
Администратор Сообщений: 5322 |
Есть такая проблема, что в УТ 11 ред. в товарах в файл описания для сайта указывают файл doc, pdf и тд. Хотя туда должен указываться файл html с описанием товара. |
Александр, что надо сделать чтобы такой ошибки c XML не возникало? Я её смог воспроизввести у себя, когда открыл монитор обменов и посмотрел обмены не за день, а за месяц: Полагаю, это какая-то детская ошибка в коде 1С, когда при записи отчета в журнал обменов не экранируется какой-нибудь спец-символ. И, выходит, мы ничего не исправили, потому что новое дополнение мы ставили два месяца назад и настройки обменов пересоздали заново. |
|
Александр Денисюк
Администратор Сообщений: 5322 |
#9 28.02.2014 14:53:39
Чтобы она не возникала — не нужно указывать левый файл в описании товара для сайта. Со стороны модуля обмена — никак нельзя проверить, что там за файл. |
||
Мне, кажется, что ошибка в данных есть, но результат обмена должен всё-равно корректно записываться и открываться. У клиента была истерика. Он сделал 10 обменов и все 10 прошли, а отчет открыть не может. Потому что отчет не открывается. Он думает, что обмен не прошел. Проверять все данные очень тяжело. Клиент заполняет каталог в 1С различными сторонними скриптами. |
|
Александр Денисюк
Администратор Сообщений: 5322 |
#11 03.03.2014 11:18:47
Так сделано, что при ошибке пишется содержимое описания файла. А если указать левый файл, то содержимое его и будут иероглифы. Конечно, ошибка то может быть и в другом.. |
||
Пользователь 258500 Постоянный посетитель Сообщений: 129 |
#12 18.05.2016 08:17:37
подскажите какой параметр php настроек надо увеличить для «максимальное время ожидания ответа»? |
||
Пользователь 25773 Эксперт Сообщений: 849 |
#13 18.05.2016 15:00:56
Вы не сможете настройками PHP увеличить время ожидание ответа сервером nginx. Если ошибку 504 Gateway Time-out показывает nginx то надо просить администратора сервера настроить nginx. Но это все-равно временное решение. В PHP есть функция set_time_limit(). Она установит вам время выполнения скрипта, но не сможет повлиять на nginx. Ваша задача разобраться на каком шаге зависает обмен. И какой код ему мешает. Модуль «Продвинутый обмен с 1C» http://marketplace.1c-bitrix.ru/solutions/askaron.pro1c/, создание сайтов и интеграция с 1С http://askaron.ru, |
||||
13.10.2020
07:59
13.10.2020 07:59:48
Ошибка 504 Gateway Time-out — бывает по разным причинам, главное, что ответ от сервера не приходит в определенное время
Самое просто решение (если код рабочий)
Увеличить время ответа сервера, время выполнения скрипта
Мы поставили 3500 секунд, но надо подбирать индивидуально
1. ngix повысить время ожидания веб-сервера 3500 секунд поставить
Подключитесь через ssh
Откройте конфигурационный файл
sudo nano /etc/nginx/nginx.conf
Добавьте(измените) строки в блоке server:
http{ #... proxy_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300; #... }
Добавьте(измените) строки в блоке server:
server { #... proxy_connect_timeout 3500; proxy_send_timeout 3500; proxy_read_timeout 3500; send_timeout 600; #... }
Перезапустите Nginx
в новом поколении
раньше так
2 Установить php max_execution_time 3500
или .htaccess (лучше для проверки)
php_value max_execution_time 3500,
или в /bitrix/php_interface/dbconn.php
@ini_set("max_execution_time", 3500);
3. Установить php session.gc_maxlifetime 3500
или .htaccess (лучше проверки)
php_value session.gc_maxlifetime 3500,
или в /bitrix/php_interface/dbconn.php
@ini_set("session.gc_maxlifetime", 3500);
4. Установить в /bitrix/php_interface/dbconn.php
5. В параметрах безопасности группы тоже увеличить сессию(во всех группах, где состоит пользователь, из-под которого обмен происходит, в т.ч. неавторизованные пользователи) 60мин (3500/60=59 мин)
Как проверить
Вывести параметры
можно в командной строке /bitrix/admin/php_command_line.php?lang=ru
можно в тестовом скрипте
//require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");//подключить пролог, если вы проверяете в скрипте и выставили max_execution_time и session.gc_maxlifetime в /bitrix/php_interface/dbconn.php echo ini_get('max_execution_time'); echo ini_get('session.gc_maxlifetime');
запустить скрипт, который будет спать немного меньше времени. чем Вы выставили:
//require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");//подключить пролог, если вы выставили max_execution_time и session.gc_maxlifetime в /bitrix/php_interface/dbconn.php sleep(3470); echo "hello world";
Искать причину в коде и править код
Причина 1
Куча кастомных обработчиков событий, или мало но очень тяжелые (долго исполняются), или много запросов к базе можно оптимизировать
Смотреть в init.php, в модулях
Решение: переделать обработчики, убрать обработчики, оптимизировать запросы к базе
Причина 2
Большая структура разделов, она выполняется за 1 шаг, если количество товаров-свойств в пакете можно уменьшить, то структура создается за 1 шаг.
Решение: только увеличить время ответа сервера, время выполнения срипта (см. выше)
Причина 3
при загрузке файла с ценами prices_***.xml
в компоненте bitrix/catalog.import.1с/component.php
на 7 шаге ($NS[«STEP»] == 7)
вызывается метод
$result = $obCatalog->ImportElements($start_time, $arParams["INTERVAL"]);
который описан тут /bitrix/modules/iblock/classes/general/clm2.php
метод обновляет фасетный индекс инфоблока, запускается без учета по времени выполнения срипта
Iblock\PropertyIndex\Manager::runDeferredIndexing($this->next_step["IBLOCK_ID"]);
И он выполнялся у заказчика 2 минуты! Соответственно 1С получает 504 Gateway Time-out, и обмен завершается ошибкой.
метод runDeferredIndexing описан тут /bitrix/modules/iblock/lib/propertyindex/manager.php
цикл
foreach (self::$elementQueue[$productIblock] as $elementId) self::elementIndexing($indexer, $elementId); //тут долго выполняется
Решение 2. закомментировать данную строку
self::elementIndexing($indexer, $elementId);
но после выполнения обмена надо запустить создание фасетного индекса
504 gateway time-out nginx/1.4.2 битрикс
Данная ошибка частенько вылетает при открытии страницы сайта. При просмотре логов сайта можем обнаружить следующую ошибку upstream timed out (110: Connection timed out) while reading response header from upstream В данном случае сервер nginx отправил запрос на apache и не дождался ответа. По умолчанию время ожидания ответа состовляет 60с. Бывает что сайт очень тяжелый, много скриптов и если ты уверен в работоспособности всех модулей и компонентов, можно добавить времени ожидания, прописав в конфиге nginx в секции location следующие строки
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300;
- На Centos конфиг хранится по следующему пути \etc\nginx\nginx.conf
- Логи сайта храниятся в папке \var\www\www-root\data\logs\
В моем случае это не помогло. Ошибка 504 gateway time out в битрикс вылетала из-за загруженности процесса httpd на 85%.
Переведя сайт на CGI PHP 5.4.45 полетели ошибки в логах Timeout waiting for output from CGI script /var/www/php-bin-isp-php56/www-root/php и Script timed out before returning headers: php При помощи команды top я увидел загруженность процесса php на 75%. Значит все дело в исполнении php скрипта. Похоже, что есть какая-то ошибка в РНР-скриптах сайта, потому как подключений совсем немного, а нагрузка от обработки ощутимая:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 31386 www-root 20 0 619956 184084 14328 S 75.0 18.1 1:19.59 php
Как узнать, какой запрос в настоящий момент выполняет php-cgi процесс
Покопавшись в интернете, я собрал очень полезные утилиты для работы с процессами на стороне сервера. Установку делал с помощью yum install strace Благодаря команде lsof, описание дал ниже, увидел последний файл, который был открыт процессом php. Это xml-файл yandex_torg04042015.php создавался агентом CCatalog::PreGenerateXML битрикс для системы Яндекс.Товары Происходил экспорт товаров в файл из инфоблока каталога товаров в количестве 15944шт Соответственно убрав выполнение агента, сайт быстренько открылся. Т.к. ошибка возникала на тестовом сервере, убрал выполнение всех агентов прописав в dbconn.php
define("NO_AGENT_CHECK", true); define("NO_AGENT_STATISTIC", true);
- top Выводит список процессов и информации о них в режиме реалтайм
- mod_status Позволяет контролировать в реальном времени производительность сервера
- strace -p PID Показывает системные вызовы, которые происходят в данный момент в процессе
- ps ax| grep PID Выдача информации о состоянии процессов
- lsof -p PID Показывает список файлов, открытых процессом
- kill -SIGKILL PID Убивает процесс
Ошибка 504 Gateway Timeout при экспорте товаров в 1С Битрикс встречается довольно часто. И связано это с хостингом. Давайте решим проблему прямо сейчас в этой статье.
Итак, причина однозначно связана с хостингом, и чаще всего встречается на VPS хостингах, так как из коробки, некоторые вещи тупо не включены на хостинге, а пользователь, особенно, который мало разбирается в настройках хостинга может и не знать, что и как делать. Данная статья направлена на то, чтобы максимально просто и легко разобраться, что нужно делать и где какие настройки устанавливать.
Для примера мы будем брать настройку VPS хостинга, который работает на панели управления ISPmanager 5 или 6 версий.
Ошибка 504 Gateway Timeout связана с тем, что по умолчанию сервер ограничивает выполнение PHP скриптов 60 секундами, а если у Вас, допустим 15 или 20 тысяч товаров, то этого времени не хватит сформировать файл CSV. Поэтому нам необходимо увеличить это время, и сделать это надо максимально грамотно, так как обычное изменение базовых настроек в PHP иногда не достататочно.
Настройки PHP при ошибке 504 Gateway Timeout
Первым делом идем в настройки PHP, смотрите скриншот ниже. Настройки находятся на панели управления ISPmanager слева.
Далее выбираем ту версию PHP, на которой работает Ваш сайт, допустим PHP 7.2. В Верхнем меню выбираем «Основные настройки» и нажимаем на эту кнопку. Перед Вами будет вот такое окно. (см. ниже)
Здесь нас интересует только один параметр, а именно «Время выполнения». При количестве товаров около 20 тысяч, ставьте 600, что будет соответствовать 10 минутам. Этого времени должно хватить для выполнения скрипта. Изменяйте значение, и нажимайте «Ок» для сохранения настроек. Все, с этой секцией мы закончили, теперь надо настроить акселлератор (ускоритель) работы выполнения PHP скриптов.
Настройка Zend Opcache
Теперь задача такая, нам нужно настроить ускоритель. Для этого возвращаемся на страницу, где видим все версии PHP. Выбираем нужную версию, но в верхнем меню теперь выбираем «Управления расширениями» (см. скриншот)
Перед нами всплывет список всех расширений, которые можно установить на наш сервер на эту версию PHP, что Вы выбрали. Вам нужно выбрать opcache. (см. скриншот).
Как только Вы выбрали расширение, справа нажмите на значок лампочки, чтобы включить это расширение. Подождите пока расширение установится. Теперь надо настроить Opcache.
Настройка Opcache в ISPmanager 6
Если Вы думали, что уже все, я спешу Вас разочаровать. Мы подошли к середине процесса. Теперь возвращаемся обратно в настройки PHP. Нажимайте на выбранной версии PHP «Расширенные настройки» и ищите в настройках переменную opcache.max_accelerated_files смотрите скриншот ниже.
Здесь нам надо поменять значение 10000 на 100000 (сто тысяч). Чтобы это сделать, просто кликните дважды мышкой по строчке с переменной и поменяйте значение.
Настройка конфигурационного файла Apache при ошибке Gateway Timeout
И последнее, что нам нужно сделать. Это настроить главный конфигурационный файл Apache. Он находится по такому адресу: /etc/httpd/conf/httpd.conf — ищем этот файл встроенным файловым менеджером по данному адресу и открываем его. В самый конец этого файла на новой строчке пишем: TimeOut 600. Сохраняем файл и перезагружаем сервер (надеюсь Вы знаете как это делать. Если что, перезагрузка на вкладке Администрирование в ISPmanager).
Ждем, когда сервер заработает опять, идем в админку своего сайта и делаем выгрузку, все должно работать отлично. Если же Вы все равно сталкиваетесь с проблемами или Вам просто нужна помощь толкового специалиста, то смело обращайтесь ко мне по моим контактам, я обязательно Вам помогу или просто пишите напрямик в мой телеграм.
Стандартная проблема для баз данных с большими таблицами — срабатывание внутреннего там-аута, при котором система с запущенным скриптом теряет связь с бд (MySQL), битрикс так и остается в ступоре (оживет после перезагрузки сервера), а в админке появляется сообщение об ошибке 504 Gateway Timeout. Возникать ошибка может на любом этапе на первой попавшейся большой таблице.
Решение 504 ошибки при оптимизации БД
Речь идёт о внутреннем инструменте оптимизации, доступным по сссылке вида: https://domain.com/bitrix/admin/repair_db.php?optimize_tables=Y&lang=.
Решение заключается в увеличении таймаутов на стороне Nginx.
Вносим правки в /etc/nginx/nginx.conf:
proxy_connect_timeout 2400;
proxy_send_timeout 2400;
proxy_read_timeout 2400;
По умолчанию все три значения равны 300 и этого явно недостаточно; значения 2400 должно хватить на большие таблицы, только запаситесь терпением, проверка больших таблиц — долгий процесс и со стороны будет казаться, что система зависла, на время проверки админка и сайт могут не будут отвечать, поэтому проводить оптимизацию нужно глубокой ночью.
При необходимости можно создать конфиг (если его нет) /etc/nginx/bx/settings/z_bx_custom.conf и вписать туда:
fastcgi_read_timeout 2400
После оптимизации увидите долгожданное сообщение:
А битрикс будет считать базу оптимизированной.