更新(2013 年 10 月 1 日):
今天终于知道是什么问题了。在使用 xdebug 调试了几个小时并尝试执行多个脚本后,我注意到脚本的主体不是问题。当以 10-20 秒的睡眠执行测试工作者时,我注意到 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,这非常好。
我也有吃大量 CPU 的感觉,curl_exec
但我不确定。
我正在尝试使用 xdebug 调试 CPU 使用情况,读取生成的 cachegrind,但是没有参考每个函数、类使用的 CPU 周期......只有花费的时间和使用的内存。
如果你想在 PHP 命令行中使用 xdebug,只需#!/usr/bin/env php -d xdebug.profiler_enable=On
在脚本顶部使用
如果有人有使用 xdebug 调试的提示,我会很高兴听到它;)
我在没有真正希望的情况下问这个问题。
我有一台服务器,用于运行工作人员来处理一些后台任务。此服务器是具有高 CPU 警报设置的自动缩放组内的 EC2 服务器 (m1.small)。
我有大约 20 个工人(php 脚本实例)在等待处理工作。要运行脚本,我使用Symfony 2.3 framework
.
作业中没有发生太多事情,从 URL 获取数据,循环遍历结果并将其逐行插入(每个作业约 1000 行)到 MySQL(RDS 服务器)中。
问题是,在运行 1 或 2 个工作人员时,CPU 处于 100%(我不认为它一直处于 100%,但它每秒左右都在飙升),这会导致自动缩放组启动新实例.
我想减少根本不合理的 CPU 使用率。我正在查看 php-fpm (fastCGI),但它看起来仅适用于 Web 服务器。PHP客户端不会使用它吗?对?
任何帮助将不胜感激,干杯