如何在运行cronjob PHP脚本时处理CPU IO峰值

时间:2011-07-27 19:10:03

标签: php cron cpu-usage

嘿,我有一些CPU峰值,因为PHP脚本我每30分钟运行一次。 脚本每天向已注册的Twitter用户发送twits,并且有很多用户。 所以基本上当PHP脚本发出twits时会导致CPU峰值。

我正在询问如何处理这种情况的方向。非常感谢。

2 个答案:

答案 0 :(得分:2)

Usleep

只需要一点点usleep即可返回CPU to other available process(CPU scheduling)

以这个简单的脚本为例:

<?php

for ($i=0;$i<1000000;$i++) {
    echo "$i\n";
}

此过程平均占用我CPU时间的20%。

附表

这个简单的脚本在averqage上只消耗10%的CPU时间。

<?php

for ($i=0;$i<1000000;$i++) {
    echo "$i\n";
    usleep(100);
}

当然这个脚本确实需要更长的时间,但CPU的安排会更好。你睡得越久,CPU就可以安排得越好。例如usleep(1000)仅使用2%的CPU时间。

我在我的Ubuntu Box上测试了这个

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.10
Release:    10.10
Codename:   maverick

消息队列

此外,您的操作系统非常擅长调度进程(当然该进程需要对您的CPU友好)所以我建议您使用消息队列来加速您的工作(发送推文)。例如,Redis也可以用作消息队列或beanstalkd。运行几个处理工作的工作进程(发送推文)。作为奖励,您不会产生相对昂贵的产卵过程的价格。在网络上,使用消息队列可以获得足够的信息。

答案 1 :(得分:1)

每次 n 请求购买更多CPU功率或[u] sleep()

您还可以从sys_getloadavg获取CPU负载,并确定sleep()是否需要(以及需要多少)。请记住,睡得太多可能会导致每个CRON花费超过30分钟。