php的session垃圾回收機制

在PHP中,沒有任何變量指向這個對象時,這個對象就成爲垃圾。PHP會將其在內存中銷燬;這是PHP的GC垃圾處理機制,防止內存溢出。php

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. 服務器

那麼這個時候怎麼解決呢?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。code

好比:對象

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;

相關文章
相關標籤/搜索