我希望有人能给我一些建议。我正在运行 CentOS 6 服务器,在过去几天里,我的磁盘使用量从 60GB 增加到了 135GB(98% 已满)。我认为问题可能与 PHP 会话目录 (/var/lib/php/session) 有关,因为它似乎很大(我无法 ls 或 rm),这个目录中肯定有数百万个文件。
我怎样才能删除这个目录?rm 在这里不起作用,我也尝试过 rsync 替换一个空目录,但是那也花了很长时间。
如果这是导致问题的原因 - 为什么 PHP 没有自动删除这些文件?
是否有可能存在某些地方的日志记录,可以指出漏洞、DDOS 或故障的方向?
谢谢
答案1
Ubuntu 的默认配置是 PHP 不会使会话过期,但有一个 cron 作业会删除旧文件。对此进行全面讨论需要一些时间(恕我直言,这是一个非常糟糕的想法),但我不知道 Redhat 是否采取了类似的方法。
您没有提供任何有关会话配置的详细信息。这种情况可能是由于 session.gc_probability、session.gc_divisor 或 session.gc_maxlifetime 中的任何一个值而引起的。设置默认值 1、100 和 1440 应该可以确保系统处于合理的稳态一旦您按照其他答案中所述清理了文件。
您没有说明您的系统上有多少并发会话、它们的平均大小以及它们存储在哪个文件系统上。如果您预计会话数量超过 300 个(取决于文件系统),则应考虑使用目录树而不是单个目录来存储文件;在 session.save_path 前加上 1 或 2(假设这不是支持服务器集群的 NFS 服务器,在这种情况下您应该迁移到其他架构)。
Matt 提到这可能是 selinux 配置的问题。如果这允许创建文件但从不删除。虽然这是可能的,但这表明系统上的配置严重混乱。如果是这种情况(检查您的审计日志),那么您可能应该进行全新安装并在其上恢复您的应用程序。
这与糟糕的编程不太可能有任何关系。
答案2
sudo find /var/lib/php/session -type f -delete
会比 更好,因为对于大文件列表来说,sudo rm /var/lib/php/session/*
扩展几乎是不可能的。*
答案3
听起来您的应用程序正在创建会话但从未销毁它们。这可能是由于编程不当和环境设置不当造成的。
如果您想删除这些会话文件,您需要使用 sudo,因为它们可能不属于您的用户。
sudo rm /var/lib/php/session/*
我会不是删除整个会话目录。
另一件事是将 PHP 会话超时调整为较小的间隔。