php启动 大量sess文件,关于PHP中Session文件过多的问题
PHP的默認(rèn)機(jī)制:每一次php請求,會有1/100的概率(默認(rèn)值)觸發(fā)“session回收”。如果“session回收”發(fā)生,那就會檢查/tmp/sess_*的文件,如果最后的修改時間到現(xiàn)在超過了1440秒(gc_maxlifetime的值),就將其刪除,意味著這些session過期失效
一、session文件是什么
文件一般為 /tmp/sessions/sess_4b1e384ad74619bd212e236e52a5a174If
username|s:9:"test";admin|s:1:"0";
二、session回收何時發(fā)生
默認(rèn)情況下,每一次php請求,就會有1/100的概率發(fā)生回收,所以可能簡單的理解為“每100次php請求就有一次回收發(fā)生”。這個概率是通過以下參數(shù)控制的
#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
假設(shè)這種情況gc_maxlifetime=120,如果某個session文件最后修改時間是120秒之前,那么在下一次回收(1/100的概率)發(fā)生前,這個session仍然是有效的。
如果你的session使用session.save_path中使用別的地方保存session,session回收機(jī)制有可能不會自動處理過期session文件。這時需要定時手動(或者crontab)的刪除過期的session
三、設(shè)置session存儲目錄
使用php5-fpm的話, 修改/etc/php5/fpm/php.ini, 修改或添加下面一行:
session.save_path = 3;600:/tmp/sessions
四、session清除腳本
#!/bin/sh
find /tmp/php-session -cmin +24 -name "sess_*" -and -size 0 -delete > /dev/null 2>&1
find /tmp/php-session -cmin +1440 -name "sess_*" -delete > /dev/null 2>&1
這里的時間我們可以通過?session.gc_maxlifetime 來獲取,放到定時任務(wù)里面即可(crontab)
其他方式
使用memcache 等 ,(session.save_handler = memcache)
使用cookie,但是cookie得加密
五、使用tmfs存儲session
1、將/tmp掛載為 tmpfs文件系統(tǒng)
修改/etc/fstab,在最后一行添加如下內(nèi)容:/tmp/sessions tmpfs defaults,size=5120m 0 0
mount -a
2、創(chuàng)建session存儲文件夾
php并不會自動去創(chuàng)建這些文件夾,不過在源文件中提供了一些創(chuàng)建文件夾的腳本。下面這個腳本也好用,腳本內(nèi)容如下
#!/bin/sh
dir="0 1 2 3 4 5 6 7 8 9 a b c d e f"
for levela in $dir;
do
for levelb in $dir;
do
for levelc in $dir;
do
mkdir -p /tmp/sessions/$levela/$levelb/$levelc;
done
done;
done
chown -R root:webgrp /tmp/sessions && chmod -R 1777 /tmp/sessions
因?yàn)?tmp/sessions是用的內(nèi)存,服務(wù)器重啟后,里面的所有文件都會丟失,所以,需要把上面的腳本加入到 /etc/rc.local中,并且要放在啟動php之前
3、將session存儲到不同的目錄中
php本身支持session的多級散列,在php.ini中,將 ;session.save_path = /tmp 改為
session.save_path = "3;/tmp/sessions
4、session的回收
使用上面的腳本即可
原文:http://www.cnblogs.com/chenpingzhao/p/5285696.html
總結(jié)
以上是生活随笔為你收集整理的php启动 大量sess文件,关于PHP中Session文件过多的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人家用nas_NAS不会用?NAS真的
- 下一篇: 自动清理mysql的lock进程的脚本_