the*_*ude 13 linux ubuntu php performance
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
Run Code Online (Sandbox Code Playgroud)
我的问题是这个过程需要很长时间才能运行,有很多磁盘 IO。这是我的 CPU 使用率图:

清理运行由青色尖峰表示。期间开始时,PHP 的清理作业被安排在默认的 09 和 39 分钟时间。在 15:00,我从 cron 中删除了 39 分钟的时间,因此大小两倍的清理作业运行的频率减半(您可以看到峰值宽度加倍,频率减半)。
以下是IO时间的相应图表:

和磁盘操作:

在大约有 14,000 个活动会话的高峰期,可以看到清理运行了整整 25 分钟,显然在整个期间使用了 100% 的一个 CPU 核心和似乎是 100% 的磁盘 IO。为什么资源如此密集?一个ls会话目录的/var/lib/php5只需要一秒钟的一小部分。那么为什么修剪旧会话需要整整 25 分钟呢?我能做些什么来加快速度吗?
该设备的文件系统当前是 ext4,在 Ubuntu Precise 12.04 64 位上运行。
编辑:我怀疑负载是由于不寻常的过程“fuser”造成的(因为我希望一个简单的东西rm比我看到的性能更快)。我将取消使用 fuser 并看看会发生什么。
恭喜您拥有一个受欢迎的网站并设法让它一直在虚拟机上运行。
如果你真的在每天两千万次网页检视拉动,那么你会叠起来PHP会议的很多文件系统,并且他们会花费很长的时间来删除不管你是否使用fuser或rm或吸尘器。
在这一点上,我建议您研究存储会话的替代方法:
memcached. 这是闪电般的速度,但如果服务器崩溃或重新启动,您的所有会话都将丢失,并且每个人都将被注销。删除fuser应该有帮助。此作业fuser为找到的每个会话文件运行一个命令(检查当前是否打开了文件),这在具有 14k 会话的繁忙系统上很容易花费几分钟。这是一个 Debian 错误(Ubuntu 基于 Debian)。
除了 memcached,您还可以尝试对会话文件使用 tmpfs(内存中的文件系统)。像 memcached 一样,这会在重新启动时使会话无效(这可以通过在关闭脚本中的某处备份此目录并在启动脚本中恢复来解决),但设置起来会容易得多。但它不会帮助fuser解决问题。
| 归档时间: |
|
| 查看次数: |
8679 次 |
| 最近记录: |