设为首页 收藏本站
查看: 449|回复: 0

[经验分享] PHP session 暫存檔過多的注意事項

[复制链接]

尚未签到

发表于 2017-4-8 08:55:38 | 显示全部楼层 |阅读模式
  PHP 預設 session 是會存成 file, 預設檔名是 sess_一串亂碼, FreeBSD 是存在 /tmp 或 /var/tmp, Debian 會放在 /var/lib/php5. (以下都以 Debian 為例)
PHP session 設定參數(php.ini)

  • PHP session 的設定參數: PHP: Runtime Configuration – Manual
session 暫存檔過多可能產生的系統狀況
  PHP session 暫存檔過多, 可能會造成下述的狀況:

  • 作業系統變的很慢
  • ls /var/lib/php5 (或 ls /tmp) 很慢 (檔案過多)
  • Apache 回應很慢
  • 前端頁面看到一片空白 (作業系統硬的碟滿了也會這樣)
session 暫存檔檢驗
  照理說, 除非網站的量太大, 不然一般的量, sess_* 的檔案應該會自動回收清除(Debian 可見 /etc/cron.d/php5 檔, 此檔會去抓過期時間設定, 定時清除)
  若沒有特別修改 php.ini, 通常 session 過期時間是 1440 秒(24分鐘), 所以要知道有沒有自動清除, 只要如下:

  • ls -lt /var/lib/php5
  • 看最後一個檔案的日期, 離現在時間有沒有超過 24 分鐘. (不過 PHP cron 清除時間是半小時跑一次, 所以可能要多觀察幾分鐘(Debian 是每小時的 09, 39 分跑.))
  • 有超過就代表沒有執行自動清除動作, 沒超過 24 分鐘, 但檔案還是太多, 下面再說解法.
sess_* 檔案時間存活超過設定時間
  這代表沒有執行自動清除的動作, 或者是過期時間有另外設定(暫時不考慮程式另外設定過期時間), 這時後可以去 php.ini 找
  ; After this number of seconds, stored data will be seen as ‘garbage’ and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440
  ; NOTE: If you are using the subdirectory option for storing session files
; (see session.save_path above), then garbage collection does *not*
; happen automatically. You will need to do your own garbage
; collection through a shell script, cron entry, or some other method.
; For example, the following script would is the equivalent of
; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
; cd /path/to/sessions; find -cmin +24 | xargs rm
  這邊有個注意事項, 他有寫說, 如果你有去修改預設的 session.save_path 的話, 系統將不會自動幫你清除過期的暫存檔, 需要自己手動管理回收暫存當的動作.
  若有修改 session.save_path 的話, 需要手動管理, 可以試試下面兩種方法:

  • 官方說明檔建議: cd /path/to/sessions; find -cmin +24 | xargs rm # 把這行寫入 cron, 定期清除
  • 另外一種, 可以試著去修改 /etc/cron.d/php5 (不過這個我沒改過, 理論上應該修改就能動才對. XD)
sess_* 檔案時間有定時清除, 但檔案還是過多
  這代表你的網站量應該還不小, 或者就是 session.gc_maxlifetime 時間設太長, 最好的解法當然是把 session 寫到 MySQL 或 memcache, 或寫 Cookie 也是好解法(記得加密)~
  在此先不考慮 MySQL 和 memcache, 用最快的方法解決有下面幾種解法:

  • 若是每個 User 進來都會自動產生 session file 的話, 可以考慮將這行加入 cron (時間看要 3 ~ 5分鐘跑一次)
      find /var/lib/php5 -cmin +5 -name "sess_*" -and -size 0 -delete > /dev/null 2>&1 # 清除 超過 5分鐘, 且容量為 0 的檔案

  • 另一個是修改 php.ini, 預設 session.save_path = /var/lib/php5當檔案太多時, 可以考慮切目錄來放那些 session file, 只要修改設定檔, 它就會自動建立目錄, 將檔案放進去囉~官方說明: (PHP: Runtime Configuration – Manual)
      session.save_path = “N;MODE;/path”
      There is an optional N argument to this directive that determines the number of directory levels your session files will be spread around in. For example, setting to ’5;/tmp’ may end up creating a session file and location like /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If.
      依官方說明設定, 設定範例如下:

    • 設定 session.save_path = ’5;/tmp’
    • session file 就會存成 /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If (切五層的目錄來存放)
    • 這樣子就可以暫時先解決檔案過多造成的系統問題囉~


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-361734-1-1.html 上篇帖子: PHP中include路径的解决方法汇总 下篇帖子: PHP 中使用 Smarty 之七:内建函数 foreach,foreachelse
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表