Подтвердить что ты не робот

Session_start кажется очень медленным (но только иногда)

По какой-то нечетной причине только сегодня наш сервер решил очень медленно во время начала сеансов. Для каждого session_start сервер истекает через 30 секунд, или для начала сеанса потребуется около 20 секунд. Это очень странно, потому что это не очень долгое время (последний раз наш сервер сделал это около 7 месяцев назад). Я попытался изменить сеанс, чтобы работать через базу данных, и это работает отлично, однако, по мере создания нашего текущего веб-сайта, для перехода на каждую страницу потребуется несколько дней и изменить загрузку сеансов, чтобы включить новый сеанс обработчик. Поэтому мой вопрос остается:

Почему это так медленно, и почему только иногда?

Мы работаем на специализированном сервере hetzner с 24 ГБ оперативной памяти, а процессор достаточно быстрый, чтобы просто запускать простой веб-сервер (Xeon, я считаю, но я не уверен). Мы запускаем debian на сервере с установкой apache + fastcgi + php5.

Сервер не сообщает о большой нагрузке, как по статусу сервера, так и по команде top. Vnstat не сообщает никаких проблем с нашей сетевой ссылкой (опять же, это не приведет к медленной обработке локального сеанса). IOtop не сообщает о проблемах с процессами, использующими весь жесткий диск. Запись в папку tmp, где находятся файлы сеанса, выполняется быстро, если выполняется через vim.

Опять же, чтобы это стало ясно, моя главная проблема здесь заключается не в том, следует ли нам переключиться на БД или в кэшированную версию сеансов, а просто спросить, почему это происходит, потому что все, что я смотрю похоже, работает нормально, за исключением самого PHP.

ИЗМЕНИТЬ: Максимальный файл в нашем каталоге PHP tmp составляет 2,9 МБ, поэтому ничего, что должно повлиять, я считаю.

ОБНОВЛЕНИЕ. Я никогда не выяснял, что не так и как его исправить, но проблема исчезла после того, как мы перешли на сеансы memcached/db.

4b9b3361

Ответ 1

Вы пробовали 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

Ответ 2

У меня была та же проблема: внезапно серверу потребовалось 30 секунд для выполнения запроса. Я заметил, что это произошло из-за session_start(). Первый запрос был быстрым, но каждый следующий запрос потребовал выполнить 30 секунд. Я обнаружил, что файл сеанса в c:\wamp\tmp был заблокирован первым запросом в течение примерно 30 секунд. В течение этого времени второй запрос ожидал, что файл будет разблокирован. Я узнал, что это как-то связано с rewrite_mod и .htaccess. Я отключил rewrite_mod и прокомментировал каждую строку в .htaccess, и она снова работает как шарм. Я не знаю, почему это произошло, потому что я не помню, чтобы изменить какие-либо настройки или conf на wamp.

Ответ 3

Я столкнулся с этой проблемой. Здесь был дан ответ:

Проблема с функцией session_start() (работает медленно)

Сессии блокируются PHP, пока выполняется один script, поэтому, если скрипты сложены в один и тот же сеанс, они могут вызвать эти удивительно длительные задержки.

Ответ 4

Каждый сеанс хранится apache как текстовый файл.

Когда начало сеанса используется для возобновления существующего сеанса (например, с помощью идентификатора файла cookie), возможно, большой рабочий файл сеанса (сеанс с большим количеством содержимого внутри) может быть запущен медленнее?

Если это возможно, вы, вероятно, прикладываете много данных к сеансам.

Ответ 5

Проверьте, есть ли у вас правильные настройки memcache, например. в /etc/php.d/memcached.ini