При работе с электронным документооборотом (1С-ЭДО) в крупных конфигурациях, таких как 1С:ERP Управление предприятием 2 или 1С:Комплексная автоматизация, пользователи часто сталкиваются с ситуацией, когда распаковка одного входящего транспортного контейнера занимает неприемлемо много времени — от 3 до 5 минут. При этом сама база работает быстро, а отправка документов происходит мгновенно.
В этой статье мы подробно разберем, почему возникают такие задержки, проанализируем технические нюансы работы КриптоПро 5.0 на Linux-серверах и выясним, как оптимизировать внутренние алгоритмы 1С для ускорения обработки пакетов.
Рассмотрим самую распространенную причину задержек при использовании серверов на базе Linux. Когда система пытается расшифровать или проверить подпись в контейнере, программный модуль КриптоПро обязан убедиться в валидности сертификата. Для этого он строит цепочку доверия до корневого удостоверяющего центра (УЦ).
Если в локальном хранилище сервера отсутствуют промежуточные или корневые сертификаты, КриптоПро пытается скачать их из интернета. Аналогичная ситуация происходит со списками отзыва (CRL). Разберем по шагам, почему это приводит к зависанию на 5 минут:
Для диагностики этой проблемы выполним проверку через командную строку сервера под пользователем, от имени которого запущен кластер 1С (обычно usr1cv8):
sudo -u usr1cv8 /opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint <отпечаток_сертификата> /tmp/test.txt /tmp/test.sig
Если команда выполняется долго и выводит предупреждения о невозможности проверить цепочку, необходимо вручную установить корневые сертификаты Минцифры и вашего УЦ в хранилища mRoot и mCA:
sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mRoot -file /path/to/minsvyaz_root.cer
sudo /opt/cprocsp/bin/amd64/certmgr -inst -store mCA -file /path/to/intermediate_ca.cer
Также проанализируем возможность настройки КриптоПро на работу в режиме offline, чтобы запретить принудительный выход в интернет для проверки отзывов, если ваша политика безопасности это позволяет.
Проанализируем ситуацию с точки зрения кода 1С. Часто замер производительности показывает, что около 30% времени при распаковке занимает получение контактной информации, причем количество итераций может достигать нескольких тысяч даже для одного документа. Выясним причину этого поведения.
При получении входящего сообщения система пытается сопоставить отправителя (по ИНН/КПП/Идентификатору ЭДО) с существующим контрагентом в вашей базе. В типовых конфигурациях 1С (ERP, КА, БП) этот процесс задействует механизмы БСП (Библиотеки стандартных подсистем), которые проверяют не только ИНН, но и ищут совпадения по регистру сведений КонтактнаяИнформация.
Если в вашей базе накоплено большое количество дублей контрагентов или не оптимизированы индексы таблиц, поиск по каждой итерации замедляет процесс. Чтобы исправить это, выполните следующие действия:
Контрагенты.Криптографические операции требуют генерации случайных чисел. На Linux-серверах (особенно в среде виртуализации) системный пул энтропии (/dev/random) может быстро истощаться. В этом случае функции КриптоПро буквально замирают, ожидая, пока операционная система накопит достаточное количество «случайности».
Для решения этой проблемы мы рекомендуем установить демон haveged или rng-tools, которые обеспечивают стабильный приток энтропии. Рассмотрим пример установки:
sudo apt-get install haveged
sudo systemctl enable haveged
sudo systemctl start haveged
После запуска этих служб скорость выполнения криптографических операций на сервере возрастает в несколько раз, что напрямую влияет на скорость работы фоновых заданий 1С-ЭДО.
Обратим внимание на версию КриптоПро 5.0.13000. Данная ветка имеет специфические особенности взаимодействия с лицензиями. Если срок действия лицензии истек или она не введена корректно, компонент может вносить искусственную задержку в несколько секунд перед каждой операцией расшифровки, пытаясь вызвать диалоговое окно (которое не отображается в режиме сервера 1С).
Проверим статус лицензии командой:
/opt/cprocsp/sbin/amd64/cpconfig -license -view
Если лицензия отсутствует, ее необходимо активировать, даже если вы используете функции, которые формально кажутся бесплатными. Также стоит убедиться, что версия платформы 1С (в вашем случае 8.3.27) корректно видит установленную компоненту. В настройках криптографии 1С (Администрирование — Обмен электронными документами — Настройки электронной подписи и шифрования) убедитесь, что проверка сертификатов настроена на выполнение на сервере.
Процесс распаковки транспортного контейнера подразумевает создание множества временных файлов в системной директории /tmp (для Linux) или %TEMP% (для Windows). Если в этих папках скопилось критическое количество файлов (десятки тысяч), создание каждого нового файла замедляется на уровне файловой системы.
Проанализируем состояние временных папок. Рекомендуется регулярно очищать содержимое папки /tmp и проверять лимиты на количество открытых файлов для пользователя usr1cv8 через настройку ulimit -n в /etc/security/limits.conf. Установите значение не менее 65536 для стабильной работы подсистемы ЭДО.
Подведем итог. Если вы столкнулись с медленной распаковкой в 1С-ЭДО, действуйте по следующему алгоритму:
haveged для ускорения генерации случайных чисел.Следуя этим шагам, вы сможете сократить время обработки документов с нескольких минут до нескольких секунд, обеспечив комфортную работу пользователей в системе 1С:ERP.