php session垃圾回收機制

2020-07-16 10:05:53
在PHP中,沒有任何變數指向這個物件時,這個物件就成為垃圾。PHP會將其在記憶體中銷毀;這是PHP的GC垃圾處理機制,防止記憶體溢位。

GC的工作就是掃描所有的Session資訊,用當前時間減去session最後修改的時間,同session.gc_maxlifetime引數進行比較,如果生存時間超過gc_maxlifetime(預設24分鐘),就將該session刪除。

當一個有效的請求發生時,PHP 會根據全域性變數 session.gc_probabilitysession.gc_divisor的值,來決定是否啟用一個GC, 在預設情況下,

session.gc_probability = 1
session.gc_divisor = 100

也就是說有1%的可能性啟動GC(也就是說100個請求中只有一個gc會伴隨100個中的某個請求而啟動).

但是,如果你Web伺服器有多個站點,多個站點時,GC處理session可能會出現意想不到的結果,原因就是:GC在工作時,並不會區分不同站點的session.

那麼這個時候怎麼解決呢?

1、修改session.save_path,或使用session_save_path()讓每個站點的session儲存到一個專用目錄;

2、提高GC的啟動率,當GC的啟動率提高,系統的效能也會相應減低,不推薦;

3、在程式碼中判斷當前session的生存時間,利用session_destroy()刪除;

session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440

這三個設定組合構建伺服器端session的垃圾回收機制

session.gc_probabilitysession.gc_divisor構成執行session清理的概率,理論上的解釋為伺服器端定期有一定的概率呼叫gc函數來對session進行清理,清理的概率為:gc_probability/gc_divisor 比如:1/100 表示每一個新對談初始化時,有

1%的概率會啟動垃圾回收程式,清理的標準為session.gc_maxlifetime定義的時間。

session.gc_divisorsession.gc_probability 合起來定義了在每個對談初始化時啟動 gc(garbage collection 垃圾回收)進程的概率。

此概率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味著在每個請求中有 1% 的概率啟動 gc 進程。session.gc_divisor 預設為 100

比如:

session.gc_maxlifetime = 60
session.gc_divisor = 1000
session.gc_probability = 1

就表示每一千個使用者呼叫session_start()的時候,就百分百的會執行一次垃圾回收機制,將磁碟上沒用的session檔案刪除。

注意:一般對於一些大型的入口網站,建議將session.gc_divisor調大一點,減少開銷

接下來,我通過一個例子演示下,如何設定才能讓呼叫gc(垃圾回收)進程呢!

通過設定php.ini檔案,修改以下幾個資訊:

session.gc_maxlifetime = 60//當session檔案在60s後還沒有被存取的話,則該session檔案將會被視為「垃圾檔案」,並且等待gc(垃圾回收)進程的呼叫的時候被清理掉
session.gc_probability = 1000

因為gc進程被呼叫的概率是通過gc_probability/gc_divisor 計算得來的,這裡我將session.gc_probability改成1000,而session.gc_divisor 預設情況下也是1000。則gc進程在每次執行session_start()函數的時候都會被呼叫到。

開啟三個對談,則建立三個對應的session檔案,當每個檔案在60秒內都沒被呼叫的話,就會被當成是「垃圾檔案」,等到gc進程呼叫的時候,「垃圾檔案」就會被unlink,因為之前我已經通過修改php.ini組態檔,將gc被呼叫的概率改成百分百,所以接下來,如果我重新使用任何一個瀏覽器重新整理下頁面的時候,三個session檔案,應該只剩下一個了

session.save_handler = files

預設為file,定義session在伺服器端的儲存方式,file意為把sesion儲存到一個臨時檔案裡,如果我們想自定義別的方式儲存(比如用資料庫),則需要把該項設定為user

相關推薦:《PHP教學

以上就是php session垃圾回收機制的詳細內容,更多請關注TW511.COM其它相關文章!