2012-04-23 97 views
0

我想知道更高的gc.maxlifetime值是否會影響網站的性能?假設2周(1209600秒)。PHP - gc.maxlifetime和perfomance?

我問的原因是因爲我的一些頁面需要幾分鐘才能加載,之前的速度非常快。我將該值從默認的24分鐘更改爲2周,以便用戶的會話數據和登錄名將保持不變。這是大約2周前,這導致我認爲高gc.maxlifetime可能是緩慢頁面加載的問題。儘管這並不總是相同的頁面。

PS:我正在轉向基於cookie的持久登錄系統,我認爲這對性能更友好?

感謝

+0

該設置使您的頁面加載的可能性很低。你的網站數據庫交互?它可能是關於分貝。另一方面,當你降低你的gc_lifetime時,頁面加載速度會更快嗎? – 2012-04-23 12:45:23

+0

是的,它有db。被查詢的表格大約有13000行,用戶每次使用LIMIT子句一次檢索大約10行。表格構建得當,我想,使用JOIN。謝謝 – hdlmsa 2012-04-23 14:04:34

回答

1

我不認爲你應該嘗試gc.maxlifetime設置。一般來說,垃圾收集器是一個非常輕量級的過程。我認爲你應該嘗試找出頁面緩慢的原因。您可以通過在特定代碼集之間添加計時器來實現此目的。然後看看你的代碼的哪一部分很慢。

例如:

<?php 

$start = microtime(true); 
/* code block A */ 
$blockA = microtime(true) - $start; 

$start = microtime(true); 
/* code block B */ 
$blockB = microtime(true) - $start; 


// etc. 


/** 
* At the end of your script, you can use the times and 
* print them to the screen, or log them to a file. 
*/ 
echo '<pre>' . PHP_EOL; 
echo 'Block A took '. round($blockA, 2) .' seconds ' . PHP_EOL; 
echo 'Block B took '. round($blockB, 2) .' seconds ' . PHP_EOL; 
echo '</pre>' . PHP_EOL; 
?> 

祝你好運找到慢的部分。提示:如果有數據庫查詢,請多加註意。

+0

這聽起來像是開始識別問題的最簡單和最合乎邏輯的方式。感謝您的建議 – hdlmsa 2012-04-23 14:06:42

1

gc.max_lifetime不應該直接影響性能,因爲它是所有設定的時間後會話公平的遊戲刪除(雖然沒有保證時,它最終會被真正刪除)。

可能會有一些抵押性能差異,因爲無論何時會話GC啓動時,都會有更多的會話來檢查是否符合清理要求,因此需要花費更多時間才能將所有這些清理出來。這是因爲您增加了會話的最短使用期限,所以其他所有事情在任何時候都相同,屆時會有更多會話正在進行。

您可以做一個非常簡單的檢查:查看會話存儲機制(默認情況下,這意味着系統臨時目錄中的文件)並查看當前存在多少個會話。如果是文件系統會話,則不應該有任何明顯的性能下降,除非你有10K或更多;在任何情況下,「可見的性能下降」都不會進入分鐘範圍(這是一個硬盤,速度有多慢?)。

1

首先出現的是不是一個選項「gc.maxlifetime」 - 你的意思是「的session.gc_maxlifetime」)

選項「的session.gc_maxlifetime」定義會話數據多久都不會被刪除垃圾收集(gc)過程。 gc過程將按照「session.gc_divisor」&「session.gc_probability」中定義的頻率啓動。

如果你有問題,你應該看看你的會話數據將被存儲在哪裏(會話保存處理程序)。比你應該優化該過程或禁用它,並通過你自己(cron)清理數據。

如果使用默認配置,PHP會將會話數據存儲在本地硬盤上,而這通常是瓶頸。

增加「session.gc_maxlifetime」的價值如此之大會打開安全問題,並簡單地拖延您的問題。