PHP内置Session垃圾回收因依赖请求触发和随机概率,在高并发生产环境几乎失效,导致/tmp等路径下sess_文件持续堆积;应通过宝塔计划任务执行find命令定时清理,关键需确认实际session.save_path路径、限定-name "sess_"、设置合理-mmin阈值(如+60),并为多PHP版本分别处理。

宝塔面板里PHP的session文件为什么越积越多
PHP默认把session存成文件,路径通常是 /tmp 或 /www/php_session(取决于PHP配置),但PHP自身的垃圾回收(session.gc_probability)在生产环境几乎不生效——因为它是请求触发的,且依赖随机概率,高并发站点可能几个月都不清理一次。结果就是 /tmp 下堆满类似 sess_abc123 的过期文件,磁盘空间悄悄被吃光。
直接用find命令清理session文件最可靠
别依赖PHP内置GC,用系统级定时任务+find更可控。关键点有三个:确认session存储路径、设置合理过期时间、避免误删正在使用的文件。
- 先查PHP实际session路径:
php -i | grep session.save_path,常见值是/tmp、/www/php_session或/var/lib/php/session - session默认有效期由
session.gc_maxlifetime控制(单位秒),一般为1440秒(24分钟),但实际文件修改时间(mtime)才是find判断依据,所以清理阈值建议设为+30m或+1h,留出缓冲 - 务必加
-name "sess_*"限定文件名前缀,防止find /tmp -mmin +30 -delete误删其他临时文件 - 示例安全清理命令:
find /tmp -name "sess_*" -mmin +60 -type f -delete
在宝塔计划任务里添加Shell脚本任务
宝塔的“计划任务”能直接运行Shell命令,无需额外写脚本文件,但要注意执行用户权限和环境变量差异。
审查 Remix v2 代码中的 v1 形态 meta 导出(v2 中为破坏性变更),cookie 安全漏洞(httpOnly、secure、密钥轮换),认证门位于错误层级,以及其他
- 登录宝塔 → 计划任务 → 添加定时任务 → 任务类型选“Shell脚本”
- 脚本内容填完整命令,例如:
find /tmp -name "sess_*" -mmin +60 -type f -delete
- 执行周期建议设为“每小时”,太频繁没必要,太宽松(如每天一次)可能积累太多
- 注意:宝塔默认以
root身份运行,但部分PHP配置的session路径(如/var/lib/php/session)属www-data用户,此时需加sudo -u www-data或改用find … -delete前先chown目录权限 - 加日志便于排查:
find /tmp -name "sess_*" -mmin +60 -type f -delete >> /www/wwwlogs/session_clean.log 2>&1
PHP-FPM多版本共存时要逐个清理
如果服务器装了PHP 7.4、8.0、8.2多个版本,它们的session.save_path很可能不同,一个find命令扫不完。
立即学习“PHP免费学习笔记(深入)”;
- 逐个查:
php74 -i | grep session.save_path、php80 -i | grep session.save_path - 对应路径可能分别是
/tmp/php74、/tmp/php80,得为每个路径单独写一条find命令 - 或者统一改PHP配置,让所有版本都用同一个
session.save_path(比如/www/php_session),再集中清理,维护更简单 - 切记:改完PHP配置后必须重启对应PHP-FPM服务,否则
php -i看到的还是旧路径
find -mmin误判;这种场景得结合stat或改用tmpwatch等更精准工具,但对大多数WordPress、ThinkPHP项目,find -mmin +60已足够稳妥。


















