嘿,我有一些CPU峰值,因为PHP脚本我每30分钟运行一次。 脚本每天向已注册的Twitter用户发送twits,并且有很多用户。 所以基本上当PHP脚本发出twits时会导致CPU峰值。
我正在询问如何处理这种情况的方向。非常感谢。
答案 0 :(得分:2)
只需要一点点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)
您还可以从sys_getloadavg
获取CPU负载,并确定sleep()
是否需要(以及需要多少)。请记住,睡得太多可能会导致每个CRON花费超过30分钟。