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

У меня есть проблема wtih session_start() на основном сервере. Когда я загружаю страницу впервые, требуется меньше чем 1 секунда для завершения запроса. Если я буду ожидать в течение приблизительно 12-15 секунд и затем перезагружать страницу, время загрузки будет тем же. Но когда я пытаюсь обновить страницу после, например, спустя 3 или 5 секунд после того, как начальная загрузка, время ответа сервера будет равняться 10 секундам.

Я сделал некоторые тесты для определения узкого места в моем сценарии, и я узнал, та функция session_start() выполняется в течение 9,8 секунд. Я использую ГРУШЕВЫЙ пакет HTTP_Session2. Вот фрагмент кода:

HTTP_Session2::useCookies(SESSION_USE_COOKIE);
/* Next line was added to make logging of execution time possible. */
self::writeToFile('HTTP_useCookies(1) -> '.self::getWorkTime()); 
HTTP_Session2::start("SID");
self::writeToFile('HTTP_start(2) -> '.self::getWorkTime());
HTTP_Session2::setExpire(time() + SESSION_EXPIRE);
self::writeToFile('HTTP_setExpire(3) -> '.self::getWorkTime());

Текст журналов:

//First loading (13:34:35)
HTTP_useCookies(1) -> 0.00038
HTTP_start(2) -> 0.00077
HTTP_setExpire(3) -> 0.00090

// Second loading (13:34:39)(4 seconds later)
HTTP_useCookies(1) -> 0.00029
HTTP_start(2) -> <<<<<< 10.80752 >>>>>
HTTP_setExpire(3) -> <<<<<< 10.80780 >>>>>

//Third loading (13:34:56)
HTTP_useCookies(1) -> 0.00041
HTTP_start(2) -> 0.00071
HTTP_setExpire(3) -> 0.00083

Таким образом, я нашел, та проблема находится в HTTP_Session2::start() функция. Код функции HTTP_Session2::start():

public function start($name = 'SessionID', $id = null)
{
  self::name($name);
  if (is_null(self::detectID())) {
    if ($id) {
      self::id($id);
    } else {
      self::id(uniqid(dechex(rand())));
    }
  }
  session_start();
  if (!isset($_SESSION['__HTTP_Session2_Info'])) {
    $_SESSION['__HTTP_Session2_Info'] = self::STARTED;
  } else {
    $_SESSION['__HTTP_Session2_Info'] = self::CONTINUED;
  }
}

Я не могу понять то, что является причиной задержки. Вероятно, на сервере существуют неправильные настройки Apache. Или, возможно, существуют некоторые 'блокировки' на файлах с информацией о сессии.

Возможно, кто-то уже встретился с такими проблемами и может помочь решить его.

5
задан Alex 16 December 2009 в 11:58
поделиться

1 ответ

Файл, содержащий информацию о сеансе, заблокирован на время, пока PHP обслуживает запрос.

Итак, если у вас есть один PHP-скрипт (использующий сеанс), который в настоящее время выполняется, и тот же пользователь отправляет еще один запрос, второй запрос будет ждать завершения первого.

14
ответ дан 18 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

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