Fonksiyon session_start ile sorun () (yavaş çalışır)

1 Cevap php

Ben birincil sunucuda bir sorun wtih session_start() var. Ben ilk defa sayfasını yüklediğinizde, bu isteği tamamlamak için en az 1 saniye sürer. Ben yaklaşık 12-15 saniye bekleyin ve sonra sayfayı yeniden verirseniz, yükleme zamanı aynı olacaktır. Örneğin ben, sonra sayfayı yenilemek çalışıyorum ama ne zaman, 3 veya 5 saniye ilk yüklemeden sonra, sunucunun tepki süresi 10 saniye eşittir.

Ben komut bir darboğaz tanımlamak için bazı testler yaptı ve ben öğrendim, bu işlev session_start() 9.8 saniye boyunca yürütür. Ben HTTP_Session2 PEAR paketi kullanıyorum. Here is code snippet:

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());

Text of the logs:

//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

Yani bu sorunu HTTP_Session2::start() fonksiyonu olduğunu bulduk. Fonksiyonun kodu 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;
  }
}

Ben zaman gecikmesinin nedeni ne anlayamıyorum. Muhtemelen, sunucu üzerinde yanlış Apache ayarları vardır. Ya da, belki, oturum bilgileri ile dosyalar üzerinde bazı 'kilit' vardır.

Belki birisi zaten bu tür sorunlarla karşılaştı ve bunu çözmek için yardımcı olabilir.

1 Cevap

Oturumun bilgileri içeren dosya PHP bir isteğe hizmet süresinde kilitlenir.

Eğer bir PHP komut dosyası şu anda idam ediliyor ki (bir oturumu kullanarak), ve aynı kullanıcı başka bir isteği gönderir varsa ilk tamamlanana kadar Yani, ikinci isteği bekler.