Столкнулся с ошибкой в Bitrix, связанной с сессиями. Особенностью данной установки, осложнившей решение проблемы, было то, что сессии хранились в Memcache. В общем случае есть очень много причин, по которым может возникать подобная ошибка. Расскажу о тех, что мне известны.
Научиться настраивать 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 будет зависеть от того, где у вас хранятся сессии. Если в базе данных, то нужно увеличить таймаут ожидания ответа от базы данных. Для этого надо добавить в параметры 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
Меняем на 600 секунд:
$lockTimeout = 55;//TODO: add setting $lockWait = 600000000;//micro seconds = 600 seconds TODO: add setting $waitStep = 100;
Если уж и это не поможет, то разбирайтесь с самим запросом. 10 минут ждать его завершения слишком долго. Увеличивать таймауты еще больше не имеет смысла.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Владимир, прошу прощения, что не в тему. А как установить BitrixEnv, на дистрибутивы пришедшие на замену CentOS (AlmaLinux, Rocky, Oracle)
У меня при запуске скрипта, сообщает, что система не CentOS.
Никак. На текущий момент BitrixENV работает только на Centos 7, которая ещё не снята с поддержки.
Очень полезная статья