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

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

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

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

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

[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 минут ждать его завершения слишком долго. Увеличивать таймауты еще больше не имеет смысла.

Онлайн курс Infrastructure as a code

Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца. Что даст вам этот курс:
  • Познакомитесь с Terraform.
  • Изучите систему управления конфигурацией Ansible.
  • Познакомитесь с другими системами управления конфигурацией - Chef, Puppet, SaltStack.
  • Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
  • В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins
Смотрите подробнее программу по .

Автор Zerox

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

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

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.