1

Magentoにcronタスクがあり、メモリ使用量の問題を特定するためにプロファイルする必要があります。スクリプトは夜間に実行され、使用可能なすべてのメモリを消費するため、30分ほどでクラッシュします。

スクリプトのプロファイルを作成して、どの関数がメモリを消費しすぎているかを判断する必要があります。

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次のようにブロックに1行追加することで、プロファイラーブロックを出力できます。

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 に答える