濮阳杆衣贸易有限公司

主頁 > 知識庫 > php中session垃圾回收機制

php中session垃圾回收機制

熱門標簽:合肥外呼系統(tǒng)app h5 地圖標注 沈陽人工智能電銷機器人公司 智能外呼電銷系統(tǒng) 拉薩打電話機器人 電銷機器人-快迭智能 寶安400電話辦理 高識別電銷機器人 哈爾濱400電話辦理到易號網

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

GC的工作就是掃描所有的Session信息,用當前時間減去session最后修改的時間,同session.gc_maxlifetime參數進行比較,如果生存時間超過gc_maxlifetime(默認24分鐘),就將該session刪除。

當一個有效的請求發(fā)生時,PHP 會根據全局變量 session.gc_probability和session.gc_divisor的值,來決定是否啟用一個GC, 在默認情況下,session.gc_probability=1, session.gc_divisor =100也就是說有1%的可能性啟動GC(也就是說100個請求中只有一個gc會伴隨100個中的某個請求而啟動).

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

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

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

提供GC的啟動率,自然,GC的啟動率提高,系統(tǒng)的性能也會相應減低,不推薦。

在代碼中判斷當前session的生存時間,利用session_destroy()刪除.

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

這三個配置組合構建服務端session的垃圾回收機制

session.gc_probability與session.gc_divisor構成執(zhí)行session清理的概率,理論上的解釋為服務端定期有一定的概率調用gc函數來對session進行清理,清理的概率為:gc_probability/gc_divisor 比如:1/100 表示每一個新會話初始化時,有1%的概率會啟動垃圾回收程序,清理的標準為session.gc_maxlifetime定義的時間。
session.gc_divisor 與 session.gc_probability 合起來定義了在每個會話初始化時啟動 gc(garbage collection 垃圾回收)進程的概率。此概率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味著在每個請求中有 1% 的概率啟動 gc 進程。session.gc_divisor 默認為 100。
比如:session.gc_maxlifetime=30,session.gc_divisor=1000,session.gc_probability=1,就表示每一千個用戶調用session_start()的時候,就百分百的會執(zhí)行一次垃圾回收機制,將磁盤上沒用的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進程在每次執(zhí)行session_start()函數的時候都會被調用到。

開啟三個會話,則創(chuàng)建三個對應的session文件,當每個文件在30秒內都沒被調用的話,就會被當成是“垃圾文件”,等到gc進程調用的時候,“垃圾文件”就會被unlink,因為之前我已經通過修改php.ini配置文件,將gc被調用的概率改成百分百,所以接下來,如果我重新使用任何一個瀏覽器刷新下頁面的時候,三個session文件,應該只剩下一個了session.save_handler = files,默認為file,定義session在服務端的保存方式,file意為把sesion保存到一個臨時文件里,如果我們想自定義別的方式保存(比如用數據庫),則需要把該項設置為user。

您可能感興趣的文章:
  • PHP session垃圾回收機制實例分析
  • PHP進階學習之垃圾回收機制詳解
  • PHP析構函數destruct與垃圾回收機制的講解
  • 掌握PHP垃圾回收機制詳解
  • 總結PHP內存釋放以及垃圾回收
  • 簡單談談PHP的垃圾回收機制
  • 深入解析PHP垃圾回收機制對內存泄露的處理
  • PHP5.3的垃圾回收機制(動態(tài)存儲分配方案)深入理解
  • 分析PHP的垃圾回收機制

標簽:梅州 巴中 張家口 威海 山東 林芝 成都 泰州

巨人網絡通訊聲明:本文標題《php中session垃圾回收機制》,本文關鍵詞  php,中,session,垃圾,回收,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《php中session垃圾回收機制》相關的同類信息!
  • 本頁收集關于php中session垃圾回收機制的相關信息資訊供網民參考!
  • 推薦文章
    石家庄市| 吴江市| 满洲里市| 印江| 绥棱县| 通渭县| 湖州市| 雅安市| 浦江县| 永春县| 临城县| 卓资县| 兴山县| 吉木萨尔县| 聂拉木县| 迁安市| 镶黄旗| 汉阴县| 喀喇沁旗| 沙坪坝区| 鲜城| 清水县| 娄底市| 玉龙| 太和县| 从江县| 苍溪县| 高邑县| 额济纳旗| 德兴市| 信丰县| 钟祥市| 新野县| 安阳市| 韩城市| 甘孜县| 墨竹工卡县| 台南县| 日照市| 花莲县| 泰顺县|