php Блокировка сессии -- в чем причина, как это работает. "Почему все страницы сайта начинают зависать"
Primary tabs
Как проявляется проблема
Проблема касается обычно обслуживания частых или одновременных запросов одного пользователя -- вы запрашивает скрипт, который долго "не отпускает" сессию, и все другие скрипты, запрошенные этим пользователем и тоже работающие с сессией виснут.
Причины блокировок
Причины следующие:
- По умолчанию php хранит сессии в файлах
- После того как вызвана session_start() файл данной сессии (файлы других сессий тут ни при чем) блокируется скриптом и не разблокируется до тех пор, пока не данные скрипт не завершится или не вызовет session_write_close().
Как исправить/избежать блокировки сессий
Сразу закрывать сессию, после проделанных с ней операций (т.е. писать код иначе)
Использовать нестандартное хранилище сессий, в котором нет блокировок (например redis)
Подробности: https://secure.php.net/manual/ru/session...
- Log in to post comments
- 6201 reads
melisa
Wed, 10/10/2018 - 16:58
Permalink
поясните, пожалуйста
- что это означает фактически?
Явно вызывать закрытие сессии?
vedro-compota
Wed, 10/10/2018 - 17:06
Permalink
примеры ситуаций, где возможна блокировка сессий
да, явно вызывать закрытие сессии, напрямую или средствами фреймворка, в конечно итоге это должно приводить к вызову session_close().
Архитектурной да, но не фактической. Например ваш сайт делает запрос к APIшке, которая в этот конкретный момент вдруг стала отвечать резко дольше, чтобы не заблокировать все страницы сайта для пользователя с данной сессией, следует перед таким опасным местом в коде (перед обращение к API) закрыть сессию, если ваша система держит её открытой.
т.е. как было сказано выше не всегда можно её оптимизировать (если это внешняя система, разве что кешировать запросы кроном, так чтобы клиент всегда обращался к кешу, но это тоже не очень хорошо если есть задача показывать самое актуальное),
более того, другой пример:
если у вас много ajax-а значит у вас не очень простое приложение, и скорее всего в нем есть операции, которые выполняются не очень быстро, а значит механизм стандартного хранения просто приведёт к тому, что запросы, которые должны обрабатываться параллельно (для чего аякс и используют), могут начать строиться в очередь.
_____________
матфак вгу и остальная классика =)