2011-01-24 14 views
0

私は、リモートサーバからイメージオブジェクトを取得し、そのAPIを使ってRackspaceのクラウドファイルにアップロードしようとしています。 a)どのようにすればこのプロセスをより効率的にすることができるのか、b)もっと多くのメモリを購入する必要があると仮定すれば、このタスクを達成するには妥当な量のRAMが必要です(現在の開発サーバーはわずか512MBです)。スクリプトを実行する際にLinuxのメモリ管理と大きなファイル

アイム:

  • は10-20間返すリモートサーバーを、照会、各IDのIDの集合(千1程度)
  • ために自分のローカルデータベースに問い合わせますイメージオブジェクトです。各イメージは25-30kです
  • 私のデータベースからのIDに基づいて、クラウドファイルコンテナを作成
  • リモートサーバーから返された各イメージオブジェクトについて、コンテナにイメージオブジェクトを作成し、イメージデータを書き込みますそのオブジェクトに
  • これは、IDSの小さなセットに比較的迅速に実行

加算画像の日時とローカルDB 210

  • 更新行、しかし100(SO 700-1k画像)5-10min取ることができ、そしてそれ以上のものに思えます無期限に実行する。ほとんど成功し、次のことを試してみました:私は中断した場所拾うとを介して動作することができ、それが実行に割り当てられたメモリを消去したい把握、数分後にスクリプトを殺すためにPHPのSET_TIMEOUTを使用して

    • セットは小さいです。しかし、このエラーは一度もスローされません
    • イメージオブジェクトがアップロードされた後の配列キーを解除します(just the reference inside the loopではありません)。

    PHPのmemory_limitが128MBに設定されていて、「トップ」コマンドを実行すると、そのユーザーの「www-data」がメモリリソースの16%を消費していました。しかし、もはやユーザのリストには表示されませんが、私はこれを見続けること:

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
    2400 mysql  20 0 161m 8220 2808 S 0 1.6 11:12.69 mysqld 
    

    を...しかし、TIME +決してが変化します。私はまだ1つの実行中のタスクがあることがわかり、まだこれらの値は変更されません:長いポストのため

    Mem: 508272k total, 250616k used, 257656k free,  4340k buffers 
    

    謝罪を - (そのもしあれば)便利であるものを全くわかりません。これは私の専門分野ではないので、ストローで少し握っています。あなたの助けを前にありがとう。

  • +0

    もう一方の画像を処理できませんか? – rik

    +0

    あなたは誤ってコードをN^2アルゴリズムの一部として書いたようです - コードを投稿してください。 – caf

    答えて

    0

    MySQLはデーモンです。実行すると、死ぬか死ぬまでメモリに常駐します。 TIME +は最後に再起動してからどのくらいのCP​​U時間が経過したかを示します。アイドル状態(%CPU = 0)の場合、CPU時間が消費されていないため、TIME +は増加しません。

    クラウドファイルAPIが何らかの種類のハンドルをリークしているかどうか確認しましたか?あなたはあなたのサービス(サービス - >あなた)から取得したイメージオブジェクトの設定を解除しているかもしれませんが、Cloudfiles APIはまだそのイメージをドアから戻す必要があります(あなた→Rackspace)。

    +0

    お返事ありがとうございます。次のステップを探していて、間違いなく助けになりました。 – Jonathon