web-dev-qa-db-ja.com

長時間実行されているDrushスクリプトが使用可能なRAMを徐々に使い果たしないようにするにはどうすればよいですか?

Feedapiから入ってくる古い未公開のノードをクリアするために使用されるdrushスクリプトがあります。スクリプトは非常に単純です。特定のタイプ(「投稿」)と年齢(90日以上)のステータス0のすべてのノードを取得し、それらをループして、各ノードを削除します。

スクリプトは一度に約4,000ノードを実行し、PHPプロセスで使用可能なメモリを使い果たします。スクリプトのフットプリントがtopから増加し、4,000ノードの制限がある程度一貫性があります。ただし、100,000を超えるノードを処理する必要があるため、プロセスで使用可能なRAMを取得するのに十分な時間、ジャッキアップするのは実用的ではないと思います。それを使い果たします。

RAM消費している)を解放するために、各反復の最後に追加できるものはありますか?

1
mph

その他のオプション: http://groups.drupal.org/node/189694

1
mikeytown2

DrupalバッチAPI および Drushから呼び出す を使用できます。 DrushからのバッチAPIの使用方法に関する別のリファレンスとして、 Drush batchTestユニットテスト を使用できます。

2
greg_1_anderson

SELECTクエリでSQLのLIMIT(およびOFFSET)コマンドを使用して、DBから一度にノードの一部、たとえば一度に3000だけを取得するのはどうですか?次に、それらの「チャンク」をループします。

0
Janne Cederberg