Ошибка Bitrix - Unable to get session lock within 60 seconds

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

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

В моем случае ошибка выглядела следующим образом:

[ErrorException] E_USER_ERROR
Unable to get session lock within 60 seconds. (0)
/home/bitrix/ext_www/vdashop.ru/bitrix/modules/main/lib/session/handlers/abstractsessionhandler.php:63

Unable to get session lock within 60 seconds

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

Решение ошибки Unable to get session lock within 60 seconds будет зависеть от того, где у вас хранятся сессии. Если в базе данных, то нужно увеличить таймаут ожидания ответа от базы данных. Для этого надо добавить в параметры Mysql сервера следующую настройку:

connect_timeout = 600

Не забудьте перезапустить mysql сервер после этого. Если не помогло, то проверьте настройки php. Там тоже можно упереться в ограничение таймаутов в минуту и больше. Увеличьте таймауты в следующих параметрах:

max_input_time = 600
max_execution_time = 600
default_socket_timeout = 600

Далее проверяем настройки nginx и таймауты ожидания ответа от backend:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;

Если ошибка с session lock не проходит, то двигаемся дальше. Если у вас сессии хранятся в memcache, то вас ждёт сюрприз. Параметр lockWait для memcache задан жестко в коде bitrix и так просто вы его не найдёте. Подсказываю сразу, где искать:

/home/bitrix/ext_www/vdashop.ru/bitrix/modules/main/lib/session/handlers/memcachesessionhandler.php

/home/bitrix/ext_www/vdashop.ru/bitrix/modules/main/lib/session/handlers

Меняем на 600 секунд:

$lockTimeout = 55;//TODO: add setting
$lockWait = 600000000;//micro seconds = 600 seconds TODO: add setting
$waitStep = 100;

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

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

3 комментария

  1. Владимир, прошу прощения, что не в тему. А как установить BitrixEnv, на дистрибутивы пришедшие на замену CentOS (AlmaLinux, Rocky, Oracle)
    У меня при запуске скрипта, сообщает, что система не CentOS.

    • Никак. На текущий момент BitrixENV работает только на Centos 7, которая ещё не снята с поддержки.

  2. скупка картриджей

    Очень полезная статья

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

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

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar