我在主服務器上有一個問題session_start()
。當我第一次加載頁面時,完成請求需要不到1秒的時間。如果我等待大約12-15秒,然後重新加載頁面,則加載時間將相同。但是當我嘗試刷新頁面後,例如,初始加載後的3或5秒時,服務器的響應時間等於10秒。問題與功能session_start()(工作緩慢)
我做了一些測試,以定義我的腳本中的瓶頸,我發現,功能session_start()
執行9.8秒。我正在使用PEAR包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設置。或者,也許對會話信息的文件有一些「鎖定」。
也許,有人已經遇到過這樣的問題,可以幫助解決它。
相關http://stackoverflow.com/q/13772074/168034 – phunehehe 2014-09-22 09:19:28