V8srvr ошибка совместного доступа к файлу

Обновлено: 05.07.2024

Анализ причин роста сеансовых данных

Платформа "1С:Предприятие" в своей работе постоянно использует механизм, называемый "сеансовые данные". В этих данных хранится служебная информация, необходимая для работы сеанса "1С:Предприятия". Например, все, что введено в поля ввода на форме, при серверных вызовах сбрасывается в сеансовые данные.

При вызове методов: ПоместитьВоВременноеХранилище, ПоместитьФайл, НачатьПомещениеФайла, значения указанные в параметрах, записываются в сеансовые данные.

При фоновом исполнении отчетов СКД, результат отчета помещается в сеансовые данные, а затем передается в клиентскую часть.

С точки зрения операционной системы, сеансовые данные представляют собой файлы в каталоге …\srvinfo\reg_<номер порта>\snccntx<GUID>.

С точки зрения внутренней структуры - это noSQL база данных (key-value storage).

Особенности работы платформы с сеансовыми данными

За работу с сеансовыми данными отвечает менеджер кластера – rmngr.exe Если в кластере несколько рабочих серверов, то сеансовые данные будут расположены в соответствии с требованиями назначения функциональности.

Если требования не заданы, то сеансовые данные распределятся равномерно по всем рабочим серверам.

Сеансовые данные растут блоками по 64 Мб. Когда заканчивается блок, то менеджер кластера выделяет следующий блок в 64Мб.Блоки большего объема возможны в результате помещения объемных данных во временные хранилища.

Для обеспечения скорости работы, платформа всегда пишет новые данные в конец, аналогично transaction log в СУБД. Таким образом, размер сеансовых данных постоянно растет. Во всем объеме сеансовых данных, существуют как актуальные, так и устаревшие данные. Актуальность данных определяется способом их помещения:

  • Если сеансовые данные помещены из формы и в качестве идентификатора передается идентификатор формы (ЭтаФорма.УникальныйИдентификатор), то данные считаются актуальными, пока открыта форма.
  • Если в качестве идентификатора передан УникальныйИдентификатор, не являющийся уникальным идентификатором формы (Новый УникальныйИдентификатор), то значение перестанет быть актуальным после завершения сеанса пользователя.
  • Если ничего не передано, то значение перестанет быть актуальным при любом следующем серверном вызове.

Перед выделением следующего блока на диске, проверяется, прошло ли 5 секунд с момента выделения предыдущего блока. Если 5 секунд прошло, то запускается "сборщик мусора" (key value garbage collector). Сборщик оценивает процент актуальных сеансовых данных в общем объеме. Если актуальные данные занимают менее 25% от общего объема, то все актуальные данные копируются в новые файлы, а затем все старые файлы сеансовых данных удаляются.


Так как каждый сеанс (клиенты, фоновые задания, web-сервисы) в своей работе постоянно пишет информацию в сеансовые данные, то при большом количестве пользователей, скорость дисковой подсистемы, на которой расположены файлы сеансовых данных, играет очень важную роль. При большом количестве пользователей, рекомендуется располагать файлы сеансовых данных на максимально быстрых дисках. Желательно RAM-drive. Отказоустойчивость дисков не важна, т.к. при потере сеансовых данных, никакой важной информации утеряно не будет.

Следует отметить порядок размещения сеансовых данных. Если поместить во временное хранилище двоичные данные или файл, то эти данные пройдут в качестве потока байт через rphost, затем в rmngr, который сбросит этот поток на диск. Если же, в качестве помещаемого значения, будет выступать коллекция (таблица значений, результат запроса, массив…), то сначала вся эта коллекция разместиться в памяти rphost, а только затем преобразуется в поток байт и будет передана в rmngr.

Размещение сеансовых данных в памяти

При работе кластера "1С:Предприятия", файлы сеансовых данных отображаются в память (mapping). Подробнее см. статью.

За счет данного механизма, процесс работает с файлом как с оперативной памятью. Файл загружается в память не целиком, а только необходимая часть.

Однако, в операционной системе Windows, отображенные в память файлы, влияют на счетчик Memory\Available Mbytes. При сильном росте сеансовых данных можно увидеть следующую картину:


Свободное место на диске, где расположены сеансовые данные, уменьшается синхронно со свободной памятью сервера. На самом деле, если посмотреть данные RamMap то видно, что большая часть оперативной памяти выделена под Mapped File


Размер памяти, указанный в колонке Standby – это неиспользуемая память (фактически свободная). При запросе памяти любым процессом, ему будет выделена память из этой области.

Следует учитывать данную особенность счетчика Memory\Available Mbytes при построении систем мониторинга или приложений, которые опираются на объем доступной оперативной памяти.

Для косвенной оценки эффективности работы операционной системы с сеансовыми данными, можно использовать счетчик Memory\Page Faults/sec, который показывает на сколько часто процессы обращаются за страницами в память, но не находят их там и подгружают с диска.

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

Проблемы сеансовых данных

Ошибка совместного доступа к файлу snccntx.dat


При появлении данной ошибки необходимо действовать по алгоритму:

1. Проверить права на папку сеансовых данных для пользователя, от которого запущена служба сервера "1С:Предприятия". Должны быть полные права.

2. Открыть на рабочем сервере диспетчер задач, установить видимость колонки "Командная строка"


3. Необходимо найти процессы rmngr.exe с одинаковым значением параметра –pid.


4. Открыть консоль кластера. Развернуть ветку кластера, порт которого соответствует параметру –regport , найденных rmngr.exe с одинаковым значением параметра –pid


5. Сопоставить PID из диспетчера задач с PID в консоли кластера. Тот процесс rmngr.exe, которого нет в консоли – принудительно завершить.

Закончилось место на диске, где расположены сеансовые данные

Необходимо следить за наличием свободного места на диске, где расположены сеансовые данные.

Не следует размещать файлы технологических журналов на одном диске с сеансовыми данными.

Если на диске, где расположены сеансовые данные, закончится место, то картина будет совершенно "апокалиптическая". Менеджер кластера будет постоянно завершаться с формированием дампа. Начнутся сотни попыток запусков рабочих процессов, которые сразу же будут завершаться с ошибками. После того, как на диске появится свободное место, сервер "1С:Предприятия" запустится в нормальном режиме.

Так же, необходимо следить за размером самих сеансовых данных. Если периодически их размер становится существенным, то необходимо обратить на это особое внимание. Следует помнить, что при срабатывании "сборки мусора" необходимо наличие свободного места на диске, в размере 25% от общего объема сеансовых данных. Если этих 25% не будет, то кластер завершит свою работу аварийно.

Изменить расположение сеансовых данных, можно указав параметр –d в строке запуска службы агента сервера.

В данном каталоге, также расположены: реестр кластера, индекс полнотекстового поиска и журнал регистрации.

Влияние циклических ссылок на рост сеансовых данных

Чаще всего при выполнении процедуры ПоместитьВоВременноеХранилище, указывается идентификатор формы (ЭтаФорма.УникальныйИдентификатор). Как написано в документации, при указании идентификатора формы данные перестают считаться актуальными после того как форма будет закрыта.

Однако, если форма содержит в себе циклические ссылки (см. статью), то после закрытия формы она не уничтожается. Это приводит следующим отрицательным эффектам:

  • данные формы остаются в памяти
  • сеансовые данные, выделенные для формы, считаются актуальными, пока не будет завершен сеанс

Чтобы избежать данной ситуации, необходимо исключить все циклические ссылки в форме (см. статью).

Необходимо стараться формировать отчеты СКД в фоновом режиме. Так как результат отчета помещается во временное хранилище фоновым заданием, то после завершения задания данный результат будет считаться неактуальным.

Методика анализа роста сеансовых данных

Сбор данных

Необходимо собрать технологический журнал:

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

После того, как технологический журнал будет собран, необходимо провести "парсинг" и выгрузить его данные в файлы csv формата:

На основании данных, которые собраны в папках rmngr_*, необходимо сформировать csv файл вида:

  • <файл ТЖ> – имя файла технологического журнала,
  • <CallID> – значение свойства CallID,
  • <InBytes> - значение свойства InBytes.

В файле …/rmngr_7188/ 15063011. log есть строка:

Данная строка должна быть преобразована в строку:

Необходимо исключить из итогового файла строки с InBytes=0, т.к. они не представляют интереса, но занимают значительный объем.

На основании данных, которые собраны в папках rphost_*, необходимо сформировать csv файл вида:

  • <процесс>– имя папки рабочего процесса,
  • <файл ТЖ> – имя файла технологического журнала,
  • <t:clientID> – значение свойства t:clientID,
  • <CallID> – значение свойства CallID.

В файле …/ rphost_1352 / 15063011 .log есть строка:

Данная строка должна быть преобразована в строку:

На основании данных, которые собраны в папках rphost_*, необходимо сформировать csv файл вида:

  • <процесс> – имя папки рабочего процесса,
  • <t:clientID> – значение свойства t:clientID,
  • <Usr> – Имя пользователя из свойства Usr.

В файле …/ rphost_1352 /15063011.log есть строка:

Данная строка должна быть преобразована в строку:

В итоге должно получиться 3 файла: scall.csv, call.csv, conn.csv

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

Создание базы данных для анализа

Необходимо создать пустую базу данных (MS SQL Server), в которую добавить таблицы:

Затем, в эти таблицы необходимо загрузить данные из соответствующих csv файлов. Сделать это можно с помощью SQL Server Integration Services


После того, как информация будет загружена в таблицы, можно проводить анализ.

Анализ работы с сеансовыми данными

TOP – 10 пользователей в разрезе процессов и времени

Запрос покажет топ-10 пользователей, которые поместили больше всего сеансовых данных в час. Затем необходимо разобраться с самым верхним (в текущем случае):

Т.е. в процессе rphost_1352 за час с 11-00 по 12-00 пользователь с идентификатором 518 записал в сеансовые данные 2 046 616 858 байт (2Гб).

Далее, необходимо найти все идентификаторы вызовов, которые записывал сеанс 518:

Ошибка совместного доступа к файлу 1С 8.3 указывает, что к файлу, захваченному одним процессом, пытается обратиться другой процесс — например, при попытке одновременного использования одного файла разными пользователями в 1С. Пока пользователь, захвативший файл, не закроет его, попытка открыть файл другим пользователем будет блокироваться.

Бухэксперт8 подготовил специальный пример формирования и исправления ошибки в 1С.

Причины ошибки

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

  • совместный доступ к файлу при работе с отчетами и обработками;
  • чистка кеша программы;
  • блокировка 1С в настройках системы.


Ошибка совместного доступа к файлу в 1С


При попытке записи сформированного отчета в файл у пользователя Иванов И.И. появляется ошибка:

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

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

Причина ошибки в данном случае — программное формирование имени Список. Если существует возможность самостоятельно менять место для записи файла или его имя, проблема решается очень просто: изменение имени файла на Список1 позволит записать файл без проблем.


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

Теперь Иванов И.И. и Сидоров Н.П. при работе с отчетом не будут мешать друг другу.

Чистка кеша программы


Во временных файлах сохраняются процедуры и функции, к которым чаще всего обращается программа. Кеши желательно периодически удалять, чтобы исключить появление ошибок при работе с 1С. БухЭкспер8 обращает внимание, что в Платформе 8.3.17 разработчики реализовали автоматическое удаление временных файлов на клиент-серверном варианте 1С.

Настройки блокировки

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


Антивирусные программы имеют разные настройки, поэтому раздел, отвечающий за исключение блокировки, придется поискать самостоятельно. В антивирусной программе Kaspersky Lab это ссылка Настроить исключения в разделе Параметры угроз и исключений .


По кнопке Добавить подбираются программы для обхода блокировок антивирусной программой.

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

См. также:

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Похожие публикации

Карточка публикации

(1 оценок, среднее: 1,00 из 5)

Данную публикацию можно обсудить в комментариях ниже.
Обратите внимание! В комментариях наши кураторы не отвечают на вопросы по программам 1С и законодательству.
Задать вопрос нашим специалистам можно по ссылке >>
Вы можете задать еще вопросов

Доступ к форме "Задать вопрос" возможен только при оформлении полной подписки на БухЭксперт8

Вы можете оформить заявку от имени Юр. или Физ. лица Оформить заявку

Нажимая кнопку "Задать вопрос", я соглашаюсь с
регламентом БухЭксперт8.ру >>

Как не попасть в ловушку, работая с контрагентами из ЕАЭС

[17.11.2021 запись] Практический переход на ФСБУ 6 и ФСБУ 26 в 1С

Изменения в 2021 году, о которых нужно знать бухгалтеру

[29.10.2021 запись] Пообъектный учет ОС и подходы к определению и пересмотру СПИ

Алгоритм альтернативного перехода на ФСБУ 6/2020 «Основные средства» в 1С

[11.10.2021 запись] Учет ОС по-новому: ФСБУ 6/2020, ФСБУ 26/2020, ФСБУ 25/2018

Марина Аркадьевна, спасибо огромное! Как всегда очень понятным языком о сложном. Ждем еще семинары!

Спасибо, помогло. Век живи, век учись.
Платформа 8.3.10.2753, конфигурация УТ 10.3.14.3 На 8.3.92309 сегодня поймал при динамическом обновлении. Автору спасибо. Все сработало. Вошел в конфигуратор, получил конфу из хранилища и дообновил.
У меня дополнительно отказались работать запросы в SQL Studio. Ошибка при выполнении: "неверно задано имя папки" (the directory name is invalid). Пофиксилось выполнением в cmd команды "mkdir %temp%". Потом уже запросы на удаление косячных записей из таблицы config.
Может и это кому пригодится.
Еще раз автору спасибо и респект. Сегодня уйду с работы вовремя:) Спасибо, помогло
АльфаАвто 4 сильно переписанная, без режима совместимости, платформа 8.3.12.1714. Всё сработало вывод один : Динамического обновления - БОЛЬШЕ НИКОГДА, всех пользователей взашей.
СПАСИБО! (101) Были проблемы но решались
1. sel ect * fr om Config WHERE FileName = 'commit'
2. delete fr om config where FileName = 'commit'
3. sel ect * fr om Config WH ERE FileName = 'dbStruFinal'
4. delete fr om config wh ere FileName = ' dbStruFinal' 8,3,10,2667
Рухнула при сравнении конфигураций. ни режимы ни динамические обновления не при чем.
Судя из того как все произошло - косяк внутри самих платформ. происходит "смещение" идентификатора ключа версии структуры базы. в результате платформа не признает созданные ею же метки о начале модернизации конфы.

это что-то новенькое.

У меня данное решение не помогло. Помогла замена таблиц из утренней копии. Но этот вариант не всегда поможет, на сколько я понял, если конфигурация копии отличается от конфигурации данных рабочей базы, то могут быть еще ошибки. Так что, метод на ВАШ СТРАХ И РИСК.

truncate table [dbo].[Config]
truncate table [dbo].[ConfigSave]
truncate table [dbo].[DBSchema]
truncate table [dbo].[Params]

ins ert into [dbo].[Config] sel ect * from [base_up].[dbo].[Config]
ins ert in to [dbo].[DBSchema] sel ect * fr om [base_up].[dbo].[DBSchema]
ins ert in to [dbo].[Params] sele ct * fr om [base_up].[dbo].[Params]


где base - рабочая база
base_up - развернутая копия базы (например, ночная) Чудо-пост! Спасибо.
УТ 11, 8.3.9.2233, режим совместимости: используется (8.2.16) Спасибо автору! Смогли быстро разрулить.
Сбой произошел во время динамического обновления. Платформа 8.3.11.3034. Режим совместимости "Версия 8.2.13" Упало при динамическом обновлении. Сабж помог. КА 1.1 на 8.3.12.1855 Проблема после добавление в конфигураторе нового реглзадания.
Автор, спасибо ! 1С:Предприятие 8.3 (8.3.12.1714) динамическое обновление.
Режим совместимости "Не использовать"
Статья помогла

Помогите, пожалуйста.
При динамическом обновлении вышла ошибка, описанная автором. Решение автора помогло, смогла попасть в конфигуратор. Но при попытке обновления выходит ошибка
Ошибка доступа к файлу 'v8srvr://сервер/база/config/versions'
по причине:
Ошибка доступа к файлу 'versions'

И опять критическая ошибка. Что делать то?

Помогите, пожалуйста.
При динамическом обновлении вышла ошибка, описанная автором. Решение автора помогло, смогла попасть в конфигуратор. Но при попытке обновления выходит ошибка
Ошибка доступа к файлу 'v8srvr://сервер/база/config/versions'
по причине:
Ошибка доступа к файлу 'versions'

И опять критическая ошибка. Что делать то?

1.1 Становить сервер 1с
1.2 убедиться, что все процессы сервера 1с фактически остановились и нет фантомных Rphost
2. перезапустить сервер СУБД
3. запустить сервер 1с.

Такая же беда при демоническом обновлении. Платформа 8.3.10.2753 64, MS SQL 2014. Статья выручила, благодарю. Спасибо. Помогла статья. Пользователей не всегда получается выгонять, если это не обязательно. Спасибо большое! Мне кажется из-за этой статьи автор попадет в рай(Подставить нужное место в соответствии с вашей религией) =) Спасибо, за теплые слова. Действительно это одно из моих немногих небольших открытий, которые многим помогли. А это больше всего согревает душу )

1С 8.3.9.1850
PostgreSQL, версия 9.4.2-1.1C
При динамическом обновлении, ругнулась на Version, и уаля
«Внимание. При обновлении данных, после последней реструктуризации, произошла ошибка. Повторить обновление?»
После

delete fr om config where FileName = 'commit'
delete from config wh ere FileName = 'dbStruFinal'

Заработало!
Незадолго пробовал 15ый релиз, но потом вертался взад на 9ый.
Thank God It's Not Friday

Всем привет.
8.3.10.2299 на Microsoft SQL Server Enterprise Edition (64-bit) 10.50.1600.1
Я с вами.
delete from config where FileName = 'commit'
delete from config where FileName = ' dbStruFinal'
Помогло только предприятие запустить. Конфигуратор так и остался зависшим на обновлении. (123)
перезапуск сервера 1с решил проблему с конфигуратором?

(124)
Нет. Проблема частично решилась с помощью

Delete From [dbo].[ConfigSave]

В этой таблице было 5 записей, в архивной копии посмотрел - она пустая. После удаления записей конфигуратор все равно ругнулся при запуске, что предыдущее обновление прошло с ошибками и надо обновить по новой, но уже в этот раз смог запуститься. Конфигурация ОБНОВИЛАСЬ, тот код на обновлении которого произошел сбой в конфигурации есть и в базе работает. Но теперь при каждом запуске конфигуратора выдает такое.

(125) точно удалены оба флага?
(
нужно убрать пробел в ' dbStruFinal' ->
delete fr om config wh ere FileName = 'dbStruFinal' ) (126)
Это точно или не точно?
Проблема осталась.
Попробовал сохранить конфу в файл - сохраняет. Загрузить из файла - загружает. Но при новом запуске ошибка повторяется.

(125) Проблема полностью решилась любым изменением конфы. Я поставил пробел в модуле рандомного документа, сохранил и обновил конфигурацию НЕ ДИНАМИЧЕСКИ.

Еще один момент смущает - размер таблицы Config

В ней порядка 25 тысяч записей. Некоторые датированы еще 2009 годом (годом создания базы)

Как ее схлопнуть?

Проблема полностью решилась любым изменением конфы. Я поставил пробел в модуле рандомного документа, сохранил и обновил конфигурацию НЕ ДИНАМИЧЕСКИ.

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

Спасибо. Помогла статья. на 8.3.10.2639 и 8.3.12.1616 да было.
а вот в 8.3.14.1565 пока не наблюдал.
Может исправили? Огромное спасибо за помощь! Конфигурация Альфа авто, платформа 8,3.10,2650 Было динамическое обновление базы. 8.3.10.2650. Решение помогло. Платформа 8.3.12.1790, аналогичная проблема!
Автору спасибо! Динамическое обновление - зло. Автору здоровья, счастья, жену хорошую, процветания и долгих лет жизни. Релиз 8.3.11.3034 Помогло на платформе 8.3.12.1685, УПП. При динамическом обновлении выскочила ошибка.
Автору огромное спасибо! 8.3.12.1790 динамическое обновление.
Совместимость 8.2.13
Спасибо автору за статью. Второй раз уже выручает. Первый был в 15м году, думал поправили, ан нет.

Спасибо огромное.
Чуть не поседел совсем

8.3.10.2772
Совместимость 8.2.13

Огромное спасибо! Спасли. :)
Ошибка проявилась при динамическом обновлении на Платформа 8.3.12.1790

Если что, то я , похоже, обнаружил причину такого слета.
Похоже, что виноват был кэш.
База три раза слетала так при динамическом обновлении.
После чистки кэша все прошло.

1С:Документооборот

Роман Столетов

Роман Столетов запись закреплена

Дмитрий Шешмеш

Бывает такое. Смотрите события в журнале регистрации. Может там ошибки сыпятся. Может регламентные задания повисли. Гадать лучше по логам 1с.

Роман Столетов

Дмитрий, Посмотрите пожалуйста журнал, там много событий, так и должно быть?

Роман Столетов

Дмитрий, Что такое Сеанс. Завершение? Он повторяется несколько раз в секунду

Роман Столетов

Загрузка процессора никак не связана с выполнением регламентных заданий, даже если их отключить на сервере "Блокировка регламентных заданий" - ВКЛЮЧЕНА, картина загрузки сервера не меняется ((((((((

Роман Столетов


Дмитрий Малимонов ответил Роману

Читайте также: