我在Magento中有一个cron任务,我需要对其进行分析以确定内存使用问题。该脚本在夜间运行,并且由于消耗了所有可用内存而在半小时左右后崩溃。
我需要分析脚本以确定哪些函数占用了太多内存。
我尝试使用Aoe_Profiler,但在尝试配置cron任务时,无处可查看输出,因为cron任务不会调用MVC,因此探查器的视图块不能呈现。
如何在Magento中分析cron任务?
答案 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扩展名):
现在,您可以根据需要为您的cron任务提供相应的Varien_Profiler::start()/stop()
代码。
快乐的分析!