Зависший сеанс 1С 8.3: от Диспетчера задач до блокировок в СУБД
Содержание
Если завис сеанс в 1С, сначала определите, где он висит. В файловой базе почти всегда достаточно завершить процесс 1cv8.exe или 1cv8c.exe в Диспетчере задач. В клиент-серверной базе сеанс нужно удалить в консоли администрирования серверов: Кластер → Информационные базы → <база> → Сеансы, правый клик по сеансу → «Удалить». Иначе он продолжит держать лицензию и блокировки даже после того, как пользователь закрыл окно.
Если сеанс снова зависает в одной и той же операции, завершать его каждый раз бесполезно. Нужно найти причину: долгий запрос, взаимную блокировку или нехватку памяти у рабочего процесса. Для этого есть технологический журнал и представления СУБД. Порядок действий — ниже, от безопасного к жёсткому.
Принудительное завершение сеанса откатывает его незавершённую транзакцию. Документ, который пользователь проводил в момент зависания, останется непроведённым, а несохранённые изменения пропадут. Предупредите человека, прежде чем снимать его сеанс.
Что именно зависло: клиент, сеанс или блокировка
У пользователя «всё висит», но причины бывают разные, и лечатся они по-разному. Потратьте минуту на диагностику.
- 🖥️ Завис клиент. Окно программы не отвечает, в заголовке «Не отвечает», процесс
1cv8c.exeгрузит процессор или съел гигабайты памяти. Сервер при этом может быть в полном порядке. - ⏳ Сеанс выполняет долгий вызов. Клиент ждёт ответа сервера: идёт тяжёлый отчёт, закрытие месяца , пересчёт итогов. В консоли кластера у такого сеанса растёт время текущего вызова.
- 🔒 Сеанс ждёт блокировку. Он ничего не считает, а стоит в очереди за данными, которые держит другой сеанс. Обычно в это же время «висят» ещё несколько человек на тех же документах.
- 👻 «Мёртвый» сеанс. Пользователь давно закрыл программу или у него выключили компьютер, а сеанс остался в списке и занимает лицензию.
Быстрая проверка:
- Спросите, что делал пользователь в момент зависания: проводил документ, формировал отчёт, запускал обмен.
- Посмотрите, зависли ли другие пользователи. Если да — почти наверняка дело в блокировке или в рабочем процессе сервера.
- Откройте список сеансов (в консоли кластера или через «Активные пользователи») и найдите сеанс по имени пользователя и компьютеру.
- Оцените нагрузку на сервере: процессы
rphost.exeи процесс СУБД (sqlservr.exeилиpostgres).
Как снять зависший процесс 1С в Диспетчере задач
Это первый и самый простой способ. Он подходит для файловой базы и для случая, когда завис сам клиент на компьютере пользователя.
- Нажмите
Ctrl+Shift+Esc— откроется Диспетчер задач. - Перейдите на вкладку «Подробности».
- Найдите процесс клиента:
1cv8c.exe— тонкий клиент;1cv8.exe— толстый клиент и Конфигуратор;1cv8s.exe— запуск через стартер (сам по себе ничего не держит).
- Выделите процесс → «Снять задачу».
На терминальном сервере процессов 1cv8c.exe много — по одному на каждого пользователя. Включите в Диспетчере задач колонку «Имя пользователя» (правый клик по заголовку таблицы → «Выбрать столбцы»), иначе легко закрыть чужой сеанс.
То же самое из командной строки, если Диспетчер не открывается или сеанс удалённый:
:: список процессов 1С с номерами PID
tasklist /fi "imagename eq 1cv8c.exe"
:: завершить конкретный процесс по PID
taskkill /pid 12345 /f
Файловая база: что делать после снятия процесса
В файловом варианте нет сервера, который хранит сеанс. Как только процесс клиента завершён, база освобождается. Но если процесс завершился аварийно, база иногда продолжает считать, что в ней кто-то работает: Конфигуратор не даёт монопольный доступ, а «Активные пользователи» показывают призрака.
Что проверить:
- 🔍 на всех компьютерах, где открывали эту базу, не осталось процессов
1cv8c.exeи1cv8.exe(на сетевой папке база может быть заблокирована с другого ПК); - 📁 в каталоге базы лежит файл блокировки
1Cv8.1CL. Его можно удалить, только когда с базой точно никто не работает; - 🔄 после этого база открывается в обычном режиме, и Конфигуратор получает монопольный доступ.
Если файл 1Cv8.1CL не удаляется («файл открыт в другой программе»), значит, процесс 1С где-то ещё жив. На файловом сервере это видно в оснастке «Общие папки → Открытые файлы» — там же показано, с какого компьютера открыт файл.
Как разблокировать сеанс в консоли кластера серверов 1С
В клиент-серверной базе завершение клиента не всегда убирает сеанс: сервер ещё какое-то время держит его «спящим». Если клиент завис внутри серверного вызова, сеанс остаётся активным, пока вызов не закончится.
Удаление сеанса через консоль:
- Запустите «Администрирование серверов 1С Предприятия» (оснастка MMC, ставится вместе с сервером 1С).
- Разверните
Central 1C:Enterprise 8.3 servers → <имя сервера> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы. - Найдите сеанс по колонкам «Пользователь», «Компьютер» и «Приложение».
- Посмотрите время текущего вызова и время работы в СУБД — это подскажет, работает сеанс или ждёт.
- Правый клик по сеансу → «Удалить».
Если консоль просит пароль, это пароль администратора кластера или администратора информационной базы. Без него сеанс не удалить.
Не путайте сеансы и соединения. В ветке «Соединения» видны физические подключения к рабочему процессу. Разрывать соединение вместо сеанса обычно не нужно: удаляйте сеанс.
Если сеанс не удаляется
Бывает, что после «Удалить» сеанс остаётся в списке. Обычно рабочий процесс ждёт ответа от СУБД: пока запрос не вернётся, платформа не может корректно закончить вызов. В этом случае:
- Подождите 1–2 минуты и обновите список (
F5). - Проверьте, нет ли в СУБД долгого запроса от этого сеанса (см. раздел про блокировки ниже).
- Крайняя мера — перезапуск рабочего процесса
rphost.exeили службы «Агент сервера 1С:Предприятия».
Перезапуск rphost или службы сервера обрывает сеансы всех пользователей, которые на нём работают. Делайте это вне рабочего времени или после того, как предупредили людей и они сохранили данные.
Завершение сеанса через rac
Если консоль недоступна (сервер на Linux, нет MMC, нужно автоматизировать), используйте утилиту rac. Она работает через службу сервера администрирования ras, которая должна быть запущена (по умолчанию порт 1545).
:: найти UUID кластера
rac cluster list
:: список сеансов кластера
rac session list --cluster=<UUID кластера>
:: завершить сеанс
rac session terminate --cluster=<UUID кластера> --session=<UUID сеанса>
Если у кластера задан администратор, добавьте к командам учётные данные (--cluster-user и --cluster-pwd). Полный перечень параметров — в справке rac help session.
Завершить сеанс из самой программы
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) администратор может снять сеанс, не заходя на сервер.
- Откройте
Администрирование → Обслуживание. - Найдите ссылку «Активные пользователи».
- Выделите сеанс пользователя и выполните команду завершения сеанса в командной панели списка.
В клиент-серверной базе программа запросит параметры администрирования кластера — те же логин и пароль, что для консоли. В файловой базе завершить чужой сеанс из списка не получится: он только покажет, кто работает.
Там же, в разделе обслуживания, есть блокировка работы пользователей. Она пригодится, если нужно выгнать всех разом: например, перед обновлением. Пользователи получают предупреждение, а через заданное время программа сама завершает их сеансы.
Конфигуратор тоже показывает список: Администрирование → Активные пользователи. Но это только просмотр — завершать сеансы из Конфигуратора нельзя.
Технологический журнал: почему сеанс завис
Если зависание повторяется, найдите причину. Технологический журнал (ТЖ) пишет события сервера 1С в текстовые файлы. Для поиска зависаний нужны три события:
| Событие | Что показывает |
|---|---|
TLOCK | установка управляемой блокировки, кто и что заблокировал |
TTIMEOUT | сеанс не дождался блокировки и получил ошибку таймаута |
TDEADLOCK | взаимоблокировка: два сеанса ждут друг друга |
Включается журнал файлом logcfg.xml в каталоге conf платформы, например C:\Program Files\1cv8\conf\ на сервере 1С. Перезапускать службу не нужно — платформа перечитывает файл сама в течение минуты.
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\techlog" history="24">
<event>
<eq property="name" value="TLOCK"/>
</event>
<event>
<eq property="name" value="TTIMEOUT"/>
</event>
<event>
<eq property="name" value="TDEADLOCK"/>
</event>
<property name="all"/>
</log>
</config>
Параметр history="24" — сколько часов хранить журнал. Каталог D:\techlog должен существовать, а у пользователя службы сервера 1С должны быть права на запись.
Как читать результат:
- 🔎 в событиях
TTIMEOUTищите, кто ждал и на каком объекте; - 🧩 в
TLOCKпо тому же пространству блокировок найдите сеанс, который держал данные дольше всех, — это и есть причина; - 📌 в
TDEADLOCKуказаны оба участника взаимоблокировки и ресурсы, которые они не поделили.
ТЖ с событием TLOCK на нагруженной базе пишет гигабайты за час. Включайте его на время воспроизведения проблемы и не забудьте выключить: удалите блоки <log> из файла или переименуйте его.
Как найти блокировку в MS SQL и PostgreSQL
Иногда сеанс 1С висит не на управляемой блокировке платформы, а внутри СУБД: его запрос ждёт строку, которую держит чужая транзакция. В консоли кластера у такого сеанса растёт время работы в СУБД, а сам сеанс ничего не делает.
MS SQL Server
В SQL Server Management Studio выполните:
-- кто кого блокирует
SELECT session_id, blocking_session_id, wait_type, wait_time, status, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
В колонке blocking_session_id — номер «виновника». Если цепочка длинная, ищите сеанс, который сам никого не ждёт, но блокирует других. Завершить его можно командой KILL <номер>.
PostgreSQL
-- заблокированные процессы и их блокировщики
SELECT pid, pg_blocking_pids(pid) AS blocked_by, state, wait_event_type,
now() - query_start AS duration, left(query, 80) AS query
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;
-- завершить процесс-блокировщик
SELECT pg_terminate_backend(<pid>);
Завершать соединение в СУБД — последнее средство. Транзакция откатится, а сеанс 1С получит ошибку и, скорее всего, упадёт. Сначала попробуйте удалить сеанс-виновник в консоли кластера: это аккуратнее.
| Способ | Когда применять | Риски |
|---|---|---|
| Диспетчер задач | завис клиент, файловая база | теряются несохранённые данные пользователя |
Консоль кластера / rac | сеанс висит на сервере, держит лицензию | откат текущей транзакции сеанса |
| «Активные пользователи» | нет доступа к серверу, есть пароль кластера | то же, что в консоли |
KILL / pg_terminate_backend | блокировка в СУБД, сеанс не удаляется | сеанс 1С падает с ошибкой |
| Перезапуск rphost или службы | рабочий процесс не отвечает | обрываются сеансы всех пользователей процесса |
Как не допустить зависаний сеансов
Профилактика экономит больше времени, чем любой способ снять сеанс. Что настроить:
- Время жизни спящих сеансов. В свойствах информационной базы в консоли кластера есть параметры «Засыпание пассивного сеанса» и «Завершение спящего сеанса» (в секундах). Задайте их, и брошенные сеансы будут закрываться сами, освобождая лицензии.
- Контроль памяти рабочих процессов. В свойствах кластера можно задать допустимый объём памяти рабочих процессов и включить принудительное завершение проблемных процессов. Сервер перезапустит «раздутый» rphost до того, как он подвесит всех.
- Регламентные задания по расписанию. Тяжёлые фоновые задания (обмены, пересчёт итогов, загрузка курсов, полнотекстовый индекс) не должны совпадать с пиком работы бухгалтерии.
- Обслуживание СУБД. Обновление статистики и перестроение индексов по расписанию снимают большую часть «внезапно долгих» запросов.
- Управляемые блокировки. Если база старая и работает в автоматическом режиме блокировок, перевод на управляемый режим уменьшает число конфликтов. Делает это разработчик, а не администратор.
- Длинные операции — частями. Перепроведение за год, массовую загрузку документов лучше запускать по месяцам и вне рабочего времени.