PHP /var/lib/php/session 完整错误的可能原因

PHP /var/lib/php/session 完整错误的可能原因

我在使用 PHP 会话时遇到了问题,我不知道如何解决这个问题。

>> df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/mapper/vglocal20120426-root00   36274176 32885458 3388718   91% /
tmpfs                                6176642       1 6176641    1% /dev/shm
/dev/sda1                            64000      47   63953    1% /boot
/dev/mapper/vglocal20120426-tmp00    131072    1703  129369    2% /tmp

>> df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vglocal20120426-root00    545G  248G  270G  48% /
tmpfs                                 24G     0   24G   0% /dev/shm
/dev/sda1                             243M   31M  199M  14% /boot
/dev/mapper/vglocal20120426-tmp00     2.0G  802M  1.1G  42% /tmp

我有这个疯狂的数据

drwx-wx-wt   2 root root   1016389632 Jul  9 08:13 session

iNodes 已经达到 91%,并且每秒都在增长。问题是我的网站流量并不大(基于实时分析)。我不确定这里发生了什么。如何追溯问题并防止这种情况再次发生。

我们关闭了 PHP 垃圾收集器,而是每 8 小时使用 cronjob 删除旧会话一次。

现在技术支持正在运行一个脚本来删除会话文件,该脚本一直在运行,所以就像永无止境的过程。

如果有人能帮助我,我将不胜感激。谢谢

答案1

是的,你确实陷入了困境。问题是目录中有这么多文件,可能需要删除所有文件。您暂时不需要 cronjob——它们可能只是堆积在一起,使目前的问题变得更糟。您还需要小心执行删除操作的具体方式——您不能尝试使用 glob 或以其他方式枚举所有文件,因为在您实际删除任何文件之前,这会花费很长时间并占用大量内存;相反,您需要一个脚本,它会在文件readdir出现时删除它们(我怀疑,虽然我不确定,它find -delete可能这样做;当我不得不删除几百万个文件时,我使用了一个小的 ruby​​ 脚本)。

一旦问题得到控制(几周后),然后你可以每小时运行一次 cronjob 来删除几天/几周/任何时间之前的内容。我猜你已经那里有相当多的会话文件。我也不知道该怎么做——根据我的经验,PHP 在控制这类事情方面做得还不错。

相关内容