我在 Magento 中有一个 cron 任务,我需要对其进行分析以确定内存使用问题。该脚本在夜间运行,并在半小时左右后由于消耗所有可用内存而崩溃。
我需要分析脚本以确定哪些函数消耗了太多内存。
我曾尝试使用Aoe_Profiler,但在尝试分析 cron 任务时,无处可查看输出,因为 cron 任务不调用 MVC,因此无法呈现分析器的视图块。
如何在 Magento 中分析 cron 任务?
我在 Magento 中有一个 cron 任务,我需要对其进行分析以确定内存使用问题。该脚本在夜间运行,并在半小时左右后由于消耗所有可用内存而崩溃。
我需要分析脚本以确定哪些函数消耗了太多内存。
我曾尝试使用Aoe_Profiler,但在尝试分析 cron 任务时,无处可查看输出,因为 cron 任务不调用 MVC,因此无法呈现分析器的视图块。
如何在 Magento 中分析 cron 任务?
我们在从命令行运行和调试/测试 cron 脚本时不时使用的“技巧”是将cron.php
位于 Magento 应用程序的根文件夹中的脚本复制到代表您希望执行的 cron 任务的新脚本中,例如xyz_cron_task.php
。
该脚本的底部是一个try/catch
块:
try {
Mage::getConfig()->init()->loadEventObservers('crontab');
Mage::app()->addEventArea('crontab');
Mage::dispatchEvent('default');
} catch (Exception $e) {
Mage::printException($e);
}
这可以更改如下,只运行您感兴趣的 cron 任务:
try {
Mage::getModel('your_module/cron')->yourCronTask();
} catch (Exception $e) {
Mage::printException($e);
}
现在可以从命令行或浏览器执行 cron 任务。您可以访问该页面http://yourdomain/xyz_cron_task.php
,然后将执行 cron 任务(尽管您还不会看到任何有趣的东西)。
要使分析工作(假设您已经在管理部分启用了分析),请在之后添加以下代码require 'app/Mage.php';
:
Varien_Profiler::enable(); // This enables profiling
Mage::setIsDeveloperMode(true); // This allows you to see exceptions etc, but not stricly required.
这将启用分析,但您仍然不会看到分析器输出,因为没有视图模型来渲染它。
您可以通过在块中添加一行来输出分析器块try/catch
,如下所示:
try {
Mage::getModel('harmony/cron')->importProductsAndStock();
// The following line outputs the profiler block.
echo Mage::app()->getLayout()->createBlock("core/profiler")->toHtml();
} catch (Exception $e) {
Mage::printException($e);
}
您现在应该看到分析器输出如下(假设您使用的是Aoe_Profiler扩展):
现在您可以根据需要Varien_Profiler::start()/stop()
为您的 cron 任务添加适当的代码。
快乐的剖析!