По какой-то нечетной причине, только сегодня наш сервер решил очень медленно во время начала сеансов. Для каждого session_start сервер истекает через 30 секунд, или для начала сеанса потребуется около 20 секунд. Это очень странно, потому что это не очень долгое время (последний раз наш сервер сделал это около 7 месяцев назад). Я попытался изменить сеанс, чтобы работать через базу данных, но это работает отлично, однако, по мере создания нашего текущего веб-сайта, для перехода на каждую страницу потребуется несколько дней и изменить загрузку сеансов, чтобы включить новый сеанс обработчик. Поэтому мой вопрос остается:
Почему это так медленно, и почему только иногда?
Мы работаем на выделенном сервере hetzner с 24 ГБ оперативной памяти, а процессор достаточно быстрый, чтобы просто запускать простой веб-сервер (Xeon, я считаю, но я не уверен). Мы запускаем debian на сервере с настройкой apache + fastcgi + php5.
Сервер не сообщает о большой нагрузке, как по статусу сервера, так и по top
команде. Vnstat
сообщает никаких проблем с нашей сетевой ссылкой (опять же, это не приведет к медленной обработке локального сеанса). IOtop
сообщает о проблемах с процессами, которые обрабатывают весь жесткий диск. Запись в папку tmp, где расположены файлы сеанса, выполняется быстро, если выполняется через vim.
Опять же, чтобы это стало ясно, моя главная проблема здесь заключается не в том, следует ли нам переключиться на БД или в кэшированную версию сеансов, это просто спросить, почему это происходит, потому что все, что я смотрю, похоже, работать отлично, за исключением самого PHP.
EDIT : максимальный файл в нашем каталоге PHP tmp составляет 2,9 МБ, поэтому ничего, что должно повлиять, я считаю.
ОБНОВЛЕНИЕ : я никогда не определял, что было не так, и / или как его исправить, но проблема исчезла после того, как мы перешли на сеансы memcached / db.
Вы пробовали session_write_close();
? Это отключит возможность записи в переменных сеанса, но вы все равно сможете прочитать данные из них. И позже, когда вам нужно написать переменную сеанса, снова откройте ее.
Я также пострадал от этой проблемы, но эта вещь работала как шарм. Вот что я делаю:
session_start(); //starts the session $_SESSION['user']="Me"; session_write_close(); // close write capability echo $_SESSION['user']; // you can still access it
У меня была та же проблема: серверу потребовалось 30 секунд для выполнения запроса. Я заметил, что это произошло из-за session_start () . Первый запрос был быстрым, но каждый следующий запрос занял около 30 секунд . Я обнаружил, что файл сеанса в c: \ wamp \ tmp был заблокирован первым запросом в течение примерно 30 секунд. В течение этого времени второй запрос ожидал, что файл будет разблокирован. Я узнал, что это как-то связано с rewrite_mod и .htaccess . Я отключил rewrite_mod и прокомментировал каждую строку в .htaccess, и она снова работает как шарм. Я не знаю, почему это произошло, потому что я не помню, как меняют настройки или conf на wamp.
Я столкнулся с этой проблемой. Здесь был дан ответ:
Проблема с функцией session_start () (работает медленно)
Сессии блокируются PHP, когда выполняется один скрипт, поэтому, если скрипты сложены в один и тот же сеанс, они могут вызвать эти удивительно длительные задержки.
Каждый сеанс хранится apache как текстовый файл.
Когда начало сеанса используется для возобновления существующего сеанса (например, с помощью идентификатора файла cookie), может быть, может быть запущен большой файл сеанса (сеанс с большим количеством содержимого внутри)?
Если это так, вероятно, приложение добавляет много данных в сеансы.
Проверьте правильность настроек memcache, например, в /etc/php.d/memcached.ini