it-swarm.com.ru

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

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

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

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

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

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

EDIT: Максимальный размер файла в нашем каталоге PHP tmp составляет 2,9 МБ, так что, я думаю, ничего такого, что могло бы оказать влияние.

UPDATE: я так и не выяснил, что было не так и/или как это исправить, но проблема исчезла после того, как мы переключились на сессии memcached/db.

25
h2ooooooo

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

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

5
user2929078

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

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

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

2
phphelp

Я знаю, что это старый вопрос, но я только что исправил эту проблему на моем сервере. Все, что я сделал, это включил обходной кеш для доменов в менеджере кеша в cpanel.

Мои сессии начинались и закрывались годами, теперь они мгновенные.

0
user1432290

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

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

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

0
ab_dev86

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

0
vikramaditya234