如何在Magento中分析cron任务

如何在Magento中分析cron任务,magento,cron,profiler,Magento,Cron,Profiler,我在Magento中有一个cron任务,需要对其进行分析以确定内存使用问题。脚本在夜间运行,大约半小时后由于占用所有可用内存而崩溃 我需要分析脚本以确定哪些函数占用了太多内存 我尝试过使用,但在尝试评测cron任务时,没有地方可以查看输出,因为cron任务不调用MVC,因此无法呈现分析器的视图块 如何在Magento中分析cron任务?在从命令行运行和调试/测试cron脚本时,我们经常使用的一个“技巧”是将位于Magento应用程序根文件夹中的cron.php复制到表示要执行的cron任务的新脚

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

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

我尝试过使用,但在尝试评测cron任务时,没有地方可以查看输出,因为cron任务不调用MVC,因此无法呈现分析器的视图块


如何在Magento中分析cron任务?

在从命令行运行和调试/测试cron脚本时,我们经常使用的一个“技巧”是将位于Magento应用程序根文件夹中的
cron.php
复制到表示要执行的cron任务的新脚本中,例如
xyz\u cron\u 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);
}
您现在应该看到分析器输出,如下所示(假设您使用的是扩展):

现在,您可以根据需要将适当的
Varien_Profiler::start()/stop()
代码添加到cron任务中


快乐

在从命令行运行和调试/测试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);
}
您现在应该看到分析器输出,如下所示(假设您使用的是扩展):

现在,您可以根据需要将适当的
Varien_Profiler::start()/stop()
代码添加到cron任务中


快乐

为什么您提出问题,然后在同一分钟内回答?请参阅此链接:。这是一件需要花点时间才能正确处理的事情,我想我很想与大家分享。我非常感谢大家分享,只是从来没有看到过在同一分钟内有人问我,也没有人回答过——所以我想我会尝试了解你的理据,SE博客完美地回答了我的问题。:)(心想,既然我还没有在这里问一个问题,你能不能接受你自己的答案?)看来你可以(尽管你没有得到代表)。我在等着看是否有人对这个话题有任何意见。顺便说一句,当你问一个问题时,你可以直接回答。这将阻止问题提交,直到你完成答案。哈哈,很好!很高兴知道,谢谢^^为什么您提出问题,然后在同一分钟内回答?请参阅此链接:。这是一件需要花点时间才能正确处理的事情,我想我很想与大家分享。我非常感谢大家分享,只是从来没有看到过在同一分钟内有人问我,也没有人回答过——所以我想我会尝试了解你的理据,SE博客完美地回答了我的问题。:)(心想,既然我还没有在这里问一个问题,你能不能接受你自己的答案?)看来你可以(尽管你没有得到代表)。我在等着看是否有人对这个话题有任何意见。顺便说一句,当你问一个问题时,你可以直接回答。这将阻止问题提交,直到你完成答案。哈哈,很好!很高兴知道,谢谢^^