Ubuntu设置了一个cron作业,用于查找和删除旧的PHP会话:
# Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] \
&& [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 \
-maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir \
fuser -s {} 2> /dev/null \; -delete
我的问题是,此过程需要很长时间才能运行,并且有很多磁盘IO。这是我的CPU使用率图表:
蓝绿色尖峰代表清理运行。在此期间的开始,PHP的清理作业计划为默认的09和39分钟时间。在15:00时,我从cron中删除了39分钟的时间,因此清理工作的速度是大小的两倍(您可以看到峰的宽度是原来的两倍,峰的频率是原来的两倍)。
以下是IO时间的相应图表:
和磁盘操作:
在大约14,000个活动会话处于高峰时,可以看到清理运行了整整25分钟,显然是整个周期使用了100%的一个CPU内核,似乎使用了100%的磁盘IO。为什么如此耗费资源?一个ls
会话目录的/var/lib/php5
只需要一秒钟的一小部分。那么,为什么要花整整25分钟来整理旧的会话?我有什么办法可以加快速度?
该设备的文件系统当前为ext4,在64位Ubuntu Precise 12.04上运行。
编辑:我怀疑负载是由于异常的过程“定影器”造成的(因为我希望简单的操作rm
比我看到的性能要快得多)。我将删除热熔器的使用,然后看看会发生什么。