@Avreliya777

Почему может зависать сайт на PHP до закрытия всех вкладок?

Бывает зависает наш сайт у пользователя. Открываешь новые вкладки, а он крутит загрузку и не открывает.
Нужно закрыть все вкладки с сайтом получается подождать секунд 15 и снова открыть, тогда откроется.
При этому когда у этого пользователя не работает - у других с других машин всё работает. И даже если на этой же машине открыть сайт в другом браузере в этот момент - он откроется нормально. Т.е. зависание из под того браузера, где работаешь, т.е. он там какой-то запрос обработать не может видимо, но при этом и соединение не рвёт, пока вручную не закроешь все вкладки не разрывает. А потом когда разорвёт - снова нормально открывается.
Сам сайт на хостинге, vds'ка на debian'е.
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Поведение очень похоже на блокировку файла сессий.
При запуске скрипта открывается сессия (session_start), файл блокируется. При попытке открыть ту же сессию в другом скрипте будет ожидание освобождения файла сессии.
Решение - в начале скрипта, особенно долго выполняющегося, открывать сессию, забирать из неё все нужные данные и сразу закрывать сессию (session_write_close). При необходимости изменить данные в сессии открывать её снова, менять данные и тут же закрывать.
Как вариант - переносить хранение сессий в базу данных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
99% что блокируется сессия.
Когда PHP обрабатывает запрос, он по умолчанию открывает сессию, а закрывает только тогда, когда код завершает свою работу. Проблема в том, что файловые сессии блокируются. Если какой то поток открыл сессию, то другие потоки будут ждать пока она не закроется.
Решение этой проблемы - уход от хранения сессий в файловой системе, обычно в таком случае выбирают memcache.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы