如何在Magento中分析cron任务

时间:2013-01-16 00:55:09

标签: magento cron profiler

我在Magento中有一个cron任务,我需要对其进行分析以确定内存使用问题。该脚本在夜间运行,并且由于消耗了所有可用内存而在半小时左右后崩溃。

我需要分析脚本以确定哪些函数占用了太多内存。

我尝试使用Aoe_Profiler,但在尝试配置cron任务时,无处可查看输出,因为cron任务不会调用MVC,因此探查器的视图块不能呈现。

如何在Magento中分析cron任务?

1 个答案:

答案 0 :(得分:4)

我们在命令行中运行和调试/测试cron脚本时不时使用的'技巧'是将位于Magento应用程序根文件夹中的cron.php复制到代表的新脚本您希望执行的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扩展名):

enter image description here

现在,您可以根据需要为您的cron任务提供相应的Varien_Profiler::start()/stop()代码。

快乐的分析!