1

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

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

我曾尝试使用Aoe_Profiler,但在尝试分析 cron 任务时,无处可查看输出,因为 cron 任务不调用 MVC,因此无法呈现分析器的视图块。

如何在 Magento 中分析 cron 任务?

4

1 回答 1

4

我们在从命令行运行和调试/测试 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 任务添加适当的代码。

快乐的剖析!

于 2013-01-16T00:55:08.667 回答