1c-crm-red
От экспертов «1С-Рарус»: Необычный случай утечки памяти на кассовом оборудовании
14.02.2020

От экспертов «1С-Рарус»: Необычный случай утечки памяти на кассовом оборудовании

Маломощные кассовые терминалы и «1С»

На сегодняшний день использование торгового оборудования ограниченных мощностей в сетях общественного питания является обычной практикой. Связано это с тем, что количество кассовых терминалов может достигать десятков и сотен в одном заведении. При этом на самих кассовых терминалах изначально не предполагаются тяжелые вычислительные операции, что позволяет пренебречь мощностями в пользу экономии средств. Однако использование маломощных устройств выявляет необычные ситуации в сравнении с высоконагруженными системами.

Одна из таких ситуаций произошла при внедрении на крупном предприятии решения для автоматизации предприятий питания «1С:Фастфуд. Фронт-офис».

Клиент обратил внимание, что во время штатной работы с рабочим местом повара спустя пару минут система принудительно прекращала работу.

Прекращена работа программы 1cv8c

В рамках данной статьи будет рассматриваться поиск и исследование причин данной проблемы, а также взаимодействие с фирмой «1С» при решении данной задачи.

Расследование

Параметры стенда:

  • Типовое решение на кассовых узлах: «1С:Фастфуд.Фронт-офис» в файловом режиме 32х.
  • Операционная система: Microsoft Windows 7.
  • Платформа «1С»: 8.3.11.2899.
  • Конфигурация POS-терминала:
    • процессор: Intel Core, 2 ядер;
    • оперативная память:  2GB;
    • дисковый накопитель: Toshiba mk3276gsx.

Обнаружение проблемы

Первым делом попробуем воспроизвести данную проблематику. Для этого запускаем рабочее место повара и начинаем эмулировать работу с заказами на приготовления. В результате спустя пару минут получаем соответствующую ошибку.

Обнаружение проблемы

Для получения данных о состоянии «железа» настроим счетчики производительности в Performance Monitor:

Обнаружение проблемы

Обнаружение проблемы

Запустим счетчики производительности и повторим эксперимент. Анализируя общую картину показателей можно заметить проблемы с показателями памяти.

Обнаружение проблемы

В частности, можно заметить необычный рост показателя «Байт виртуальной памяти», а также «Байт виртуальной памяти (пик)». Необычность роста объясняется тем, что в случае обычного роста памяти, спустя время происходит небольшое освобождение за счет неиспользуемых значений. Однако «Байт виртуальной памяти (пик)» только увеличивается.

Рост показателей

Выдвигаем предположение, что результатом такого потребления памяти может быть проблема циклических ссылок или же особенности в поведении платформы. Для подтверждения гипотезы о циклических ссылках рассмотрим такие методы обнаружения как сбор технологического журнала, а также использования внутренних средств платформы «1С:Предприятие 8».

Для корректного формирования технологического журнала необходимо перевести базу в клиент-серверный вариант и убедится, что ошибка сохраняется.

После чего включим сбор технологического журнала (ТЖ) по событиям: CALL, LEAKS и SCRIPTCIRCREFS.  Для этого формируем файл logcfg.xml с содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
    	<log history="72" location="E:\Logs\FF">
    	<event>
        		<eq property="name" value="CALL"/>
   	</event>
    	<event>
        		<eq property="name" value="LEAKS"/>
    	</event>
   	 <event>
        		<eq property="name" value="SCRIPTCIRCREFS"/>
    	</event>
    	<property name="all"/>
	</log>
</config>	

После проведения повторного эксперимента приступим к анализу технологического журнала. Т. к. в результате эксперимента получился файл небольшого размера, то воспользуемся программой Notepad++ для поиска событий LEAKS и SCRIPTCIRCREFS. Однако в результате данных событий не было зафиксировано.

LEAKS

SCRIPTCIRCREFS

После того как технологический журнал не собрал логи по данным событиям, усомнимся в гипотезе о циклических ссылках. Для окончательного разоблачения данной гипотезы воспользуемся возможностями платформы «1С:Предприятие 8». Включим режим поиска циклических ссылок в параметрах конфигурации, а также разместим соответствующую процедуру проверки из встроенного языка в предполагаемые проблемные места.

Режим поиска циклических ссылок в параметрах конфигурации

Повторно повторим эксперимент: проблема повторилась, а ошибки от платформы не появились. На основании чего делаем вывод, что проблема не связана с циклическими ссылками. Так как данное рабочее место выполняет ограниченное количество операций (обновление состава заказов, изменение статусов приготовления блюд, вывод текущих заказов на табло), то проанализируем влияние каждой операции на память. Для этого будем выполнять перечисленные операции, а динамику потребления памяти наблюдать с помощью диспетчера задач Windows.

Выполняя операции по очереди и сравнивая состояние памяти была выявлена проблемная операция: «вывод текущих заказов на табло».

Вывод текущих заказов на табло

Благодаря этой информации мы можем проанализировать выполняемый код и соответствующее влияние на память. После комментирования строк непосредственного заполнения табличных документов было обнаружено логическое потребление памяти.

Текущий табличный документ

При более детальном анализе было выявлено, что при выполнении метода Вывести() память занималась, а при Очистить() — не освобождалась. Для разрешения данной ситуации обратились за помощью к техническому отделу фирмы «1С».

Помощь фирмы «1С»

Для разрешения данной ситуации обратились за помощью к фирме «1С».

Для этого был сформирован необходимый набор материалов: внешняя обработка с тестовым примером, инструкция как ей пользоваться и видео с примером воспроизведения.

Заполнение табличного документа

Заполнение табличного документа

Заполнение табличного документа

После передачи материалов фирма «1С» оперативно среагировала и выпустила платформу версии 8.3.12.1440, где в том числе была исправлена и данная проблематика.

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

Заполнение табличного документа

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

Решение

В данной статье была рассмотрена необычная ситуация утечки памяти при заполнении и очищении табличного документа в ходе работы типового решения «1С:Фастфуд. Фронт-офис».

Данная ситуация была обнаружена в связи ограниченными ресурсами кассовых терминалов. В ходе проведения исследования было сформулировано предположение о том, что возможной причиной являлись циклические ссылки. Однако проведенные тесты опровергли ее. Позднее была выявлена особенность работы встроенных методов и благодаря фирме «1С» была получена версия платформы, которая решала данную проблему. Как можно видеть, не всегда утечка памяти связана с циклическими ссылками, но подходы к расследованию сохраняются, поскольку сказать о причинах, просто взирая на симптомы, невозможно.

Авторы статьи

Гримута Артем
Гримута Артем
Черанев Андрей
Черанев Андрей
Есть вопросы по статье? Задайте их нам!
info-big
Рассылка «Новости компании»: узнавайте о новых продуктах, услугах и спецпредложениях
Отправляя эту форму, Вы соглашаетесь с Политикой конфиденциальности и даете согласие на обработку персональных данных компанией «1С-Рарус»

Остались вопросы?
Нужна консультация?
Свяжитесь с нами!