Amazon ec2 php命令行脚本的高CPU使用率,php fpm是解决方案吗?

Amazon ec2 php命令行脚本的高CPU使用率,php fpm是解决方案吗?,amazon-ec2,cpu-usage,php,symfony-2.3,Amazon Ec2,Cpu Usage,Php,Symfony 2.3,更新(2013年10月1日): 今天我终于发现了问题所在。在用xdebug调试了几个小时并尝试执行多个脚本之后,我注意到脚本的主体不是问题所在。在睡眠10-20秒的情况下执行tests worker时,我注意到CPU大部分时间处于空闲状态,因此消耗CPU最多的是引导Symfony 我的脚本执行得非常快,并被杀死以典当到新脚本,等等。我已经修复了它,添加了一个do{}while(),在随机数秒后退出(以避免所有工作进程同时重新启动) 我已将负载从平均35-45%降低到平均0.5-1.5%,这是一个

更新(2013年10月1日):

今天我终于发现了问题所在。在用xdebug调试了几个小时并尝试执行多个脚本之后,我注意到脚本的主体不是问题所在。在睡眠10-20秒的情况下执行tests worker时,我注意到CPU大部分时间处于空闲状态,因此消耗CPU最多的是引导Symfony

我的脚本执行得非常快,并被杀死以典当到新脚本,等等。我已经修复了它,添加了一个
do{}while()
,在随机数秒后退出(以避免所有工作进程同时重新启动)

我已将负载从平均35-45%降低到平均0.5-1.5%,这是一个巨大的改进。要恢复Symfony,脚本只需等待一次随机超时,然后启动一个新的自身实例。这是为了避免脚本挂起或数据库连接超时等

如果您有更好的解决方案,请毫不犹豫地与我们分享。我很高兴从100%的CPU使用率(由于自动扩展,x4台服务器)降低到1%以下(并且只有一台服务器)对于相同的工作量,现在的速度更快了


更新(2013年9月24日):

刚才注意到Symfony的控制台组件默认使用
dev
环境。 我在命令行中指定了
prod
/app/console--env=prod my:command:action
,我将执行时间除以5,这很好

另外,我觉得curl\u exec消耗了大量CPU,但我不确定

我正在尝试使用xdebug调试CPU使用情况,读取生成的cachegrind,但没有引用每个函数、类等使用的CPU周期。。。只有花费的时间和使用的内存

如果您想在PHP命令行中使用xdebug,只需使用
#/脚本顶部的usr/bin/env php-d xdebug.profiler_enable=On

如果有人有使用xdebug调试的技巧,我很乐意听到;)


我问这个问题没有真正的希望

我有一个服务器,用来运行workers来处理一些后台任务。此服务器是一个EC2服务器(m1.small),位于具有高CPU警报设置的自动扩展组内

我有大约20个工人(php脚本实例)在等待处理作业。要运行脚本,我使用的是
Symfony 2.3框架的控制台组件

作业中没有太多事情发生,从URL获取数据,循环结果并在MySQL(RDS服务器)中逐行插入(每个作业约1000行)

问题是,在运行1到2个工人的情况下,CPU处于100%(我不认为它一直处于100%的状态,但它每隔一秒左右就会出现峰值),这导致自动缩放组启动新实例

我想减少CPU的使用,这是完全不合理的。我在看php fpm(fastCGI),但它看起来只适用于web服务器。PHP客户端不会使用它吗?对吧?

任何帮助都将不胜感激,
干杯

我正在用FPM SAPI运行PHP5.5.3,正如@datasage在他的评论中指出的那样,这只会影响基于web的方面。在CLI上运行
php-v
命令时,您会注意到:

PHP 5.5.3 (cli) (built: Sep 17 2013 19:13:27)
所以FPM并不是CLI的一部分

除了通过Zend Framework 2运行作业之外,我也在运行与您类似的情况。我发现运行循环信息的作业有时会占用大量资源,但我也发现这是由我自己最初开发循环的方式造成的。它与PHP本身没有任何关系

我不确定你的设置,但在我的一个永远运行的作业中,我发现这是最好的,我的服务器负载几乎为零

[root@router ~]$ w
12:20:45 up  4:41,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0     11:52    5.00s  0.02s  0.00s w
这里只是一个“例子”:

其中
//在这里进行处理
我实际上正在运行几个数据库查询、处理文件,并根据作业要求运行服务器命令

因此,简而言之,我不会责怪或认为PHP-FPM导致了您的问题,但我很可能会开始关注您是如何开发代码来运行并进行必要的更改的


我目前有四个工作,永远运行,并不断在我的数据库中寻找要处理的工作,服务器负载从来没有峰值。我甚至测试了1000个待处理的工作。

每个核心运行超过1-2个工人没有什么意义。php fpm只是web服务器端的一个选项,而不是控制台端。谢谢,我就是这么想的。我可能仍然会研究PHP-FPM和Nginx,但目前这不是我的优先事项。对于信息,我使用的是无限
while
循环。我将尝试调查并找出导致CPU使用的原因。这会很棘手的!也要感谢@datasage;)
do {
    sleep(2);

    // Do your processing here
} while (1);