Перейти к содержимому

Как очистить кэш сервера 1с

  • автор:

Очистка кэша сервера 1С

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

Конфигурация “1С:Комплексная автоматизация” с нетиповыми доработками штатного программиста 1С.

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

Во-вторых, посмотрели среднее количество пользователей, одновременно работающих с базой, их оказалось порядка 18, не очень много.

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

Расскажем, как очистить кэш сервера 1С.

1. Подключитесь из-под пользователя имеющего права администратора к серверу 1С и запустите штатное приложение “Службы”. Найдите в списке службу с названием “1C:Enterprise 8.3 Server Agent (x86-64)” или в русском варианте “Агент сервера 1С:Предприятия 8.3 (x86-64)” и остановите её. Остановить службу агента 1С можно с помощью кнопки в виде чёрно-серого квадрата на панели или с помощью контекстного меню выбрав соответствующий пункт.

2. Нужно найти папку, в которой находятся файлы кэша сервера 1С. Сначала откроем папку “C:\Program Files\1cv8”, для удобства, можно ввести команду в проводнике “%ProgramFiles%\1cv8\”. Далее переходим в каталог “srvinfo” и найдем папку, начинающуюся с “reg_”, по умолчанию она будет называться “reg_1541”. Обратите внимание, в зависимости от разрядности сервера 1С и прочих настроек системы, путь к каталогу может различаться. Нас интересует папка, начинающаяся с префикса “snccntx”.

Заходим в нее, там будут два файла с расширением *.dat. Удалим файл с названием «snccntx.0000001B.dat» и файл «snccntx.dat», они и являются серверным кэшем 1С.

3. После очистки кэша сервера, необходимо запустить службу 1С. Зайдите в штатное приложение “Службы”, найдите “1C:Enterprise 8.3 Server Agent (x86-64)” или в русском варианте “Агент сервера 1С:Предприятия 8.3 (x86-64)” и запустите ее.

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

Если Вам необходима помощь с 1С, мы всегда готовы ее профессионально оказать и решить все проблемы с работоспособностью системы.

Очистка кэша 1С

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

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

Очистка пользовательского кэша

Cпособ №1 — очистка пользовательского кэша 1С вручную.

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

*где username — имя пользователя системы

Если мы перейдем в эти каталоги, то увидим папки:

каталог, где хранятся временные файлы 1С

Папки с именем типа «2a842c47-5a12-446e-b1b8-c1ad58f5813b» являются кешем БД 1С, их можно смело удалять. Перед удалением обязательно необходимо выйти из базы.

Способ №2 — очистка пользовательского кэша 1С с помощью скрипта.

Создаем текстовый документ, в который вносим следующий текст:

Сохраняем файл, затем меняем расширение с .txt на .bat

текстовый документ

После запуска .bat файла будет произведено удаление папок по маске \. -. -. -. -. для всех пользователей на сервере\пк и не затронет пользовательские настройки в базах и сам список информационных баз.

После запуска файла будет произведено удаление папок

Очистка серверного кэша 1С

Очистка серверного кэша 1С с помощью скрипта

По-умолчанию для сервера 1С:предприятия x64 по такому пути:

Путь по умолчагнию

Что выполняется в скрипте:

Что выполняется в скрипте

После запуска файла появится окно консоли со списком операций, которые выполняются, по завершению которых оно закроется.

Как очистить кэш сервера 1С

Разберем способ очистки кэша сервера 1С. Для чего это делается? Например, когда вы замечаете ошибки в 1С, которые сложно отловить технически, исправить в коде и т. п. Проверьте — возможно, «проблема» в серверном кэше.

Когда виноват локальный кэш клиента, проявляется так: при работе в общей базе у одного пользователя появляются ошибки, у другого — ничего подобного, все работает как часы.

Сценарий очистки сеансовых данных на сервере 1С

  1. Войдите на сервер 1С с правами администратора.
  2. Остановите службу «Агент сервера 1С:Предприятия 8.3» / «1C:Enterprise 8.3 Server Agent».
  3. Найдите папку reg_1541, как правило, путь такой: «%ProgramFiles%\1cv8\srvinfo\reg_1541\»
    — расположение зависит от разрядности и конфигурации портов сервера 1С.
  4. Откройте каталог snccntx + <уникальный_идентификатор>.
  5. Удалите файлы snccntx.00000. и snccntx с расширением *.dat — как раз искомые сеансовые данные.

После чего запустите Агент сервера обратно и проверьте — уйдут ли ошибки. Успехов вам.

Не получается? Зовите на помощь знакомого ИТ-специалиста, системного администратора или обратитесь с нашим джедаям техподдержки → +7-911-500-10-11

Как очистить кэш сервера 1с

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета Pyatilistnik.org. В прошлый раз мы с вами научились при в ходя пользователя на терминальный стол, подключать ему нужный список баз 1С, что согласитесь очень удобная вещь. Сегодня я с вами хочу поговорить про очистку кэша 1С у конкретного пользователя или у всех сразу, при входе в систему или в ручном режиме. Мы рассмотрим, что из себя представляет кэш и его назначение. Тема для меня была в новинку, поэтому я решил ее сохранить для себя, чтобы легко к ней можно было обратиться в будущем.

Для чего и что лежит в кэше 1С?

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

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

Папки расположения кэша 1С

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

Для версии 1С 8.2

  • %userprofile%\AppData\Roaming\1C\1Cv82
  • %userprofile%\AppData\Local\1C\1cv82

Для версии 1С 8.3

  • %userprofile%\AppData\Local\1C\1cv8
  • %userprofile%\AppData\Roaming\1C\1Cv8

Очистка кэша 1С

обратите внимание, что чаще всего кэш выглядит вот так некий GUID (589e052f-cbeb-41bf-a459-ebcfa8f5e27d) в виде папки, в которой лежит файл формата .pfl.

Очистка папки с кэшем 1С

Для чего чистить кэш 1С?

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

Лично я искал решение (Гипотеза) с зависанием терминального сервера, в логах которого я наблюдал вот такие ошибки:

Источник Application Error ID 1000: Имя сбойного приложения: 1cv8c.exe, версия: 8.3.14.1630, метка времени: 0x5c6e4c97

Источник Application Error ID 1000: Имя сбойного приложения: 1cv8c.exe, версия: 8.3.14.1630, метка времени: 0x5c6e4c97

Методы очистки кэша 1С

Существует несколько методов и сценариев, которые можно использовать при работе с приложением:

  1. Ручная очистка папки с кэшем
  2. Очистка кэша пользователя 1с с помощью PowerShell скрипта
  3. Очистка с помощью скрипта cmd
  4. Через редактирование информационной базы
  5. Через утилиту OneCleaner.exe

Несколько сценариев из практики:

  1. Использование скрипта при входе в систему, тут не важно будет это cmd или PowerShell
  2. Создание у пользователя ярлыка или скопированного файла, например на рабочем столе для ручного, самостоятельного запуска.

Ручная очистка папки с кэшем 1С

  1. Открываем по очереди папки представленные выше в моем списке,
  2. закрываем все версии «1C Предприятие» и
  3. удаляем папки с GUID. Как можете заметить, что данный метод очень трудоемкий для пользователя, так как требует много действий. Я его показал, чтобы вы поняли азу процесса.

Ручная Очистка кэша 1С

Удаление кэша 1C предприятия через PowerShell

PowerShell это инструмент номер 1 в руках системного администратора, благодаря ему вы можете автоматизировать огромное количество задач.

  • Очистка папок с кэшем для одного пользователя:
  • Очистка кэша для всех пользователей, например для RDS фермы

Благодаря PowerShell вы можете выполнить более правильное удаление, так как затрагиваются только папки с кэшем GUID, пользовательские настройки остаются, в отличии от CMD.

Удаление кэша 1C предприятия через CMD

Командная строка, это один из самых старых и действенных методов по выполнению различных сценариев в Windows, пока даже PowerShell не может ее полностью заменить, например он не умеет делать команду ipconfig /release или ipconfig /renew. Для командной строки есть такие сценарии:

If Exist %USERPROFILE%\AppData\Roaming\1C\1Cv82 (

Удаление кэша 1C предприятия через JavaScript

WScript.Echo(«Будет выполнена очистка кэша 1с»);
var _fso = new ActiveXObject(«Scripting.Filesystemobject»);
var _wShell = new ActiveXObject(«WScript.Shell»);
var _wshNetwork = new ActiveXObject(«WScript.Network»);
var wmi = «winmgmts:!\\\\.\\root\\CIMV2″;
var _wmi = GetObject(wmi);
var _win_ver = _wShell.ExpandEnvironmentStrings(_wShell.RegRead(«HKEY_LOCAL _MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentVersion»));
var _profiles_path = _wShell.ExpandEnvironmentStrings(_wShell.RegRead(«HKEY _LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\ProfilesDirectory»))
var _user_profile = _wShell.ExpandEnvironmentStrings(«%USERPROFILE%»);
var _clear_all = _parse_bool_argument(«ClearAll»);
var _pids = «»;
var stop_1cv8 = ‘cmd /c taskkill.exe /f /im 1cv8*’;
var stop_1cestart = ‘cmd /c taskkill.exe /f /im 1cestart.exe’;
var stop_1c_part = ‘cmd /c taskkill.exe /f /pid ‘
var _sel_logged_users = «SELECT * FROM Win32_LoggedOnUser»;
var _sel_sesn_prcs = «SELECT * FROM Win32_SessionProcess»;
var _sel_prcs_by_pid = «SELECT * FROM Win32_Process WHERE (Name like ‘1cv8%’ or Name like ‘1cestart%’) and («;
var vbYesNo = 4;
var vbYes = 6;
var exceptDirectories = [«1CEStart»,»Licence 2.0″,»tmplts»];
var exceptFiles = [«LOCATION.CFG»,»1CV8STRT.PFL»,»APPSRVRS.LST»,»IBASES.V8I»];

if(_win_ver == «5.1») <
var user_app_1c = «\\Application Data\\1C»
var user_lcl_1c = «\\Local Settings\\1C»
>else <
var user_app_1c = «\\AppData\\Roaming\\1C»
var user_lcl_1c = «\\AppData\\Local\\1C»;
>

//киляем процессы 1с
log_w(«Started by «+_wshNetwork.UserDomain+»\\»+_wshNetwork.UserName);
if(_clear_all) <
log_w(«Очищаю кэш 1С для всех профилей»);
if(!_parse_bool_argument(«DontClose1cClient»)) <
log_w(«Завершаю работу всех клиентов 1С»);
RunAndRead(stop_1cv8);
RunAndRead(stop_1cestart);
>
_profiles = new Enumerator(_fso.GetFolder(_profiles_path).SubFolders);
for (;!_profiles.atEnd(); _profiles.moveNext()) <
_clean_profile(_profiles.item());
>
>else <
log_w(«Очищаю кэш текущего пользователя»);
for(var logged_users = new Enumerator(_wmi.ExecQuery(_sel_logged_users));!logged_users.atEnd(); logged_users.moveNext()) <
var acc = logged_users.item().Antecedent;
var logon_id = logged_users.item().Dependent;
var _logged_user_rexp = eval(«/»+_wshNetwork.UserName+»/gi»);
if(_logged_user_rexp.test(acc)) <
for(var sess_prcs = new Enumerator(_wmi.ExecQuery(_sel_sesn_prcs));!sess_prcs.atEnd(); sess_prcs.moveNext()) <
var p1 = sess_prcs.item().Antecedent;
var p2 = sess_prcs.item().Dependent;
var _pid_rexp = /Handle=»\d+»/gi;
if(p1 == logon_id) <
_pids += _pid_rexp.test(p2)?»ProcessId=»+((p2.match(_pid_rexp))[0]).replace(‘Handle=»‘,»»).replace(‘»‘,»»)+» or «:»»;
>
>
//WScript.Echo(logon_id);
>
>
_pids = _pids.replace(/\sor\s$/gi,»»)
//WScript.Echo(_pids);
var _sel_only_my_1c = _sel_prcs_by_pid+_pids+»)»;
var c1s = new Enumerator(_wmi.ExecQuery(_sel_only_my_1c));
if((!c1s.atEnd())&&(_wShell.popup(«Для продолжения необходимо закрыть 1с. Продолжаем?»,0,»Подтверждение»,vbYesNo)==vbYes)) <
log_w(«Получено согласие на закртие клиентов 1С текущего пользователя»);
for(;!c1s.atEnd();c1s.moveNext()) <
c1s_cl = c1s.item();
if(!_parse_bool_argument(«DontClose1cClient»)) <
cmd = stop_1c_part+c1s_cl.ProcessID;
log_w(«Завершаю «+cmd);
RunAndRead(cmd);
>
>
>
_clean_profile(_user_profile);
>
WScript.Echo(«Кэш очищен»);

function _parse_bool_argument(pa_arg_name) <
var pa_string = «»;
for(var pa_i = 0; pa_i<WScript.Arguments.length; pa_i++) <
pa_string += WScript.Arguments(pa_i)+» «;
>
pa_re = eval(«/»+pa_arg_name+»[\\s=-]<1>[\\w\\d]+/gi»);
var pa_arr = pa_re.exec(pa_string);
if(pa_arr != null) <
pa_replace = eval(«/»+pa_arg_name+»[\\s=-]<1>/gi»);
pa_val = pa_arr[0].replace(pa_replace,»»).toUpperCase();
switch(pa_val) <
case «TRUE» : pa_ret = true;break;
case «1» : pa_ret = true;break;
case «FALSE»: pa_ret = false;break;
case «0» : pa_ret = false;break;
default : pa_ret = false;break;
>
>else <
pa_ret = false;
>
return pa_ret;
>

function RunAndRead(rar_command) <
var rar_FSO = new ActiveXObject(«Scripting.FileSystemObject»);
var rar_VSH = new ActiveXObject(«WScript.Shell»);
var rar_outname = rar_VSH.ExpandEnvironmentStrings(«%TEMP%»)+»\\»+rar_FSO.GetTempName();
var rar_str = rar_command+’ > «‘+rar_outname+'»‘;
rar_VSH.run(rar_str, 0, true);
if(rar_FSO.fileexists(rar_outname)) <
if(rar_FSO.getfile(rar_outname).size>0) <
var rar_in = rar_FSO.opentextfile(rar_outname);
var rar_ret = rar_in.readall();
rar_in.close();
>
else
rar_FSO.deletefile(rar_outname);
>else
rar_FSO = null;
rar_VSH = null;
rar_outname = null;
rar_str = null;
rar_in = null;
return rar_ret.replace(/^\r\n|(\r\n)<2,>|\r\n$/gi,»»);
>

function _clean_profile(cp_path) <
if(_fso.folderexists(cp_path+»\\»+user_app_1c)) <
ClearSubFolders(cp_path+»\\»+user_app_1c)
>
if(_fso.folderexists(cp_path+»\\»+user_lcl_1c)) <
ClearSubFolders(cp_path+»\\»+user_lcl_1c)
>
>

function ClearSubFolders(objFolder) <
var subfolder;
var filename;
var csf_subfolders = new Enumerator(_fso.GetFolder(objFolder).SubFolders);
for(;!csf_subfolders.atEnd();csf_subfolders.moveNext()) <
subfolder = csf_subfolders.item()
if(!in_array(subfolder.name,exceptDirectories)) <
var sf_path = subfolder.Path;
log_w(«Очищаю «+sf_path);
ClearSubFolders(sf_path)
try <
if(/1cv8\d*/gi.test(subfolder.Name)) <
RunAndRead(‘cmd /c rmdir «‘+sf_path+'»‘)
>else <
RunAndRead(‘cmd /c rmdir /S /Q «‘+sf_path+'»‘)
>
>catch(e) <
log_w(«Не смог удалить «+sf_path);
>
>else <
log_w(subfolder.Path + » в списке исключений»);
>
>
var csf_files = new Enumerator(_fso.GetFolder(objFolder).Files)
for(;!csf_files.atEnd();csf_files.moveNext()) <
var ffile = csf_files.item();
var fname = ffile.Path;
if(!in_array(ffile.name,exceptFiles)) <
try <
_fso.deletefile(ffile);
log_w(«Удалён «+fname);
>catch(e) <
log_w(«Не смог удалить «+fname);
>;
>
>
>

function in_array(value, array) <
for(var i = 0; i<array.length; i++) <
if(value.toUpperCase() === array[i].toUpperCase()) <
return true;
>
>
return false;
>

function log_w(lw_text_t) <
return;
var wait_limit = 999;
var wait_count = 0;
var lw_recorded = false
while(!lw_recorded) <
if(wait_count <= wait_limit) <
try <
var lw_fso = new ActiveXObject(«Scripting.Filesystemobject»);
var dateObj = new Date();
var lw_log = WScript.ScriptFullName+».log»;
lw_log_file = lw_fso.OpenTextFile(lw_log,8,true);
lw_log_file.WriteLine( dateObj.getFullYear()+».»
+((dateObj.getMonth()+1>9)?dateObj.getMonth()+1:»0″+(dateObj.getMonth()+1))+».»
+((dateObj.getDate()>9)?dateObj.getDate():»0″+dateObj.getDate())+»-»
+((dateObj.getHours()>9)?dateObj.getHours():»0″+dateObj.getHours())+»:»
+((dateObj.getMinutes()>9)?dateObj.getMinutes():»0″+dateObj.getMinutes())+»:»
+((dateObj.getSeconds()>9)?dateObj.getSeconds():»0″+dateObj.getSeconds())+»:»
+((dateObj.getMilliseconds()>99)?dateObj.getMilliseconds():((dateObj.getMilliseconds()>9)?»0″+dateObj.getMilliseconds():»00″+dateObj.getMilliseconds()))+» Не смог записать сообщение «+lw_text_t+»\r\nв файл «+WScript.ScriptFullName+».log»);
lw_recorded = true;
>
>
>

Очистка кэша 1С через OneCleaner.exe

OneCleaner.exe — это удобная, бесплатная утилита, которая поможет вам легко удалять некорректный кэш.

Запустив OneCleaner.exe она вам на вкладке «Кэш» покажет, что можно удалить, для действия нажимаем соответствующую кнопку.

Удаление кэша в OneCleaner.exe

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

Удаление платформ в OneCleaner.exe

Удаление кэша 1C предприятия через редактирование информационной базы

Необходимо в дополнительных параметрах запуска (в списке баз кнопка Изменить, последняя закладка) прописать команду /ClearCache. Пример использования:

ClearCache

Сценарии удаления кэша с групповой политикой

Как я и писал у вас два варианта, полная автоматизация при входе пользователя или выходе, минус в том что вы создадите большую нагрузку на сервер, но уменьшите возможные проблемы с работой платформы. Для этого готовим или cmd скрипт или PowerShell, создаем групповую политику для пользователя, не забываем убрать 5-ти минутную задержку выполнения скрипта.

Удаление кэша при входе скриптом

Удаление кэша при входе скриптом powershell

Мне же больше по душе, это либо преобразовать скрипт PowerShell в EXE файл, скопировать через групповые политики на рабочий стол пользователя, чтобы он потом его легко сам запускал в нужный момент, так же подойдет и копирование bat файла или javascrip, это не важно, главное, что пользователь сможет сам его запустить. Как копировать файлы через групповую политику читаем по ссылке.

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

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