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分钟,显然使用了cpu的一个核心的100%以及整个期间100%的磁盘IO.为什么资源密集?会话目录/ var / lib / PHP5的ls只需要几分之一秒.那么为什么需要整整25分钟才能完成旧会议?有什么办法可以加快速度吗?
该设备的文件系统目前是ext4,运行在Ubuntu Precise 12.04 64位上.
编辑:我怀疑负载是由于异常的过程“热熔器”(因为我希望一个简单的rm比我看到的性能更快看到).我要删除热熔器的使用,看看会发生什么.
解决方法
取下定影器应该有所帮助.
This job runs a
fuser
command (check if a file is currently opened) for every session file found,在拥有14k会话的繁忙系统上可以轻松地花费几分钟.这个
was a Debian bug(Ubuntu基于Debian).
除了memcached,您还可以尝试使用tmpfs(内存中的文件系统)来存储会话文件.与memcached一样,这会使重启时的会话无效(这可以通过在关闭脚本中的某个位置备份此目录并在启动脚本中恢复来解决),但设置起来会容易得多.但它对热熔器问题没有帮助.