Bitrix. Тормозит выгрузка на сайт. Часть первая. Одинэсная.

На очередном проекте (каталог 16к позиций + предложения + картинки) столкнулся с невозможностью выгрузки каталога на сайт. Навовсе. Долго-долго шкрябает, что-то выгружает, но завершить не может.

По порядку:
1. Смотрим в журнал ошибок. Обнаруживаем сообщение вида «Получен пустой ответ сервера.». Очевидно скрипт на стороне сайта в какой то момент просто дохнет. Включаем отображение ошибок — наблюдаем цветы в виде ошибок одного из партнерских модулей. Забыли обновить — имеем проблему. При этом, по умолчанию в настройке установлено, что выгружать проблемный пакет нужно несколько раз. В итоге — пакет не загружен, но времени на выгрузку убито очень много. Обновляем партнерский модуль — проблема уходит. Радуемся, запускаем обмен снова — опять тормоза.
2. Запускаем профилирование процесса на стороне 1С. Выясняем, что 99% времени работы механизма обмена тратится на запись сообщений в журнал обмена. Открываем настройку, видим, что путь до папки обмена записан в виде UNC ссылки (\\server\catalog). Меняем на C:\Tmp\Log. Процесс сильно ускоряется. Теперь в топе потребления времени функции работы с HTTP. Все бы хорошо, но у меня доступ на другой сервер и теперь не видно журналов обмена. У клиента на сервере, куда есть доступ, не установлены никакие браузеры, кроме IE, нет notepad++ и доступа, чтобы это поставить. Эх где ты «tail -f»?! IE при чтении файла зачем то блокирует читаемый файл и 1С-ный процесс, который пытается в этот момент писать в журнал — отваливается. В общем, даже когда журналы и были доступны — радости не было. Плюем на IE, права, и все остальное и пишем обработку для просмотра журнала непосредственно через сервер 1С. На удивление это работает, ничего не блокирует, ни с чем не конфликтует. Становится радостно. Запускаем обмен — опять грабли.
3. Хранение изображений у клиента реализовано на диске с привязкой к цвету товара. Сильно с бубном и в штатную логику обмена, понятное дело, не вписывается. Прикрученная нами выгрузка выгружает эти файлы с использованием штатных процедур обмена от Битрикс. Все вроде бы хорошо, но. На некоторых картинках выгрузка не проходит с сообщением

Доступа к хранилищу картинок не имеем. Сжимаем волю и терпение в кулак и пишем обработку для поиска и копирования в шару проблемных картинок. Просмотрев пару — обнаруживаем что это картинки как картинки, ничего особенного. Ручной аплоад через админку проблемного файла ошибок не выдает. Что это?!?
Следом появляется проблема на импорте пакета вида

Место есть. Может быть в файле с картинкой не картинка? Проверить можем только на стороне 1С. Пытаемся организовать валидацию через созданию картинки в попытке, с отбрасыванием того, что поднимает эксепшн. Запускаем обмен — те же грабли. Здесь копать дальше. Что такое — непонятно.
Хотя, данная проблема к штатным проблемам обмена 1С — Битрикс не относится.

В результате этих плясок особо кровавые мозоли натирают два угла:
1. Если 1С в клиент серверном варианте и ты не админ кластера, а каталог 16к и более позиций, то у тебя есть только одна млть попытка настроить обмен. Потому, что после запуска, если что то пошло не так, ты будешь либо ждать пока на земле случится апокалипсис, раньше обмен не закончится, либо появится человек с доступом к кластеру и отшибет проблемный процесс. Есть конечно вариант подключиться отладчиком и прибить процесс самостоятельно. Но это только если ты а. имеешь доступ в конфигуратор, б. конфигуратор не занят другим таким же как ты ущербным из штата клиента, в. на сервере включен режим отладки. Что было бы не сделать битриксу проверку константы «ЗавершитьОбмен»? Мм? Жить было бы в разы легче.
2. Если обезьянки, например, прицепили к товару картинку величиной в 2 километра или вообще не картинку, а какой нибудь щит, обмен не откидывает ее, а обламывает загрузку пакета. Это мне совсем непонятно. Зачем? А нельзя пропустить картинку, записать проблему в журнал и догрузить пакет пусть вообще без картинок? к слову, та же проблема обнаруживается и при штатном хранении картинок. Версия подсистемы перевалила за 7.х, а юзабельность все на уровне 2.0.

Выводим для себя два необходимых пункта:
1. При первой выгрузке и любой выгрузке с проблемами — включай отображение ошибок.
2. Никогда не храни каталог репортов обмена в сети. Только локально.

В общем плюньте, Киса, на все это слюной. И берегите нервы.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *