2012-03-12 4 views
0

私はスクリプトを実行しているスレッドを持っています。つまり、約50,000エントリのデータベースを使用し、400個のバッチで処理します。そのスクリプトは最初に正常に実行されますが、スクリプトは約6時間実行されるはずですが、1時間ほど後には消滅します。PHPスクリプトのスピードダンプ

最初に問題なく動作するようなコードには問題はありません。パフォーマンスを向上させるために必要な変数やその他のものをすべて解除しますが、1時間程度後に消えます。

私はmysql dbに対して4つの並列接続を使用して、このターゲットを実現し、dbへの接続を4つに限定しています。

なぜスクリプトは時間の経過とともに湿ってしまいますか?

-------------------------完了! メモリが枯渇し、stdクラスのobjを作成していましたが、現在はcurl_multi_execを使用しています。 :)

答えて

1

メモリが不足している可能性がありますか?スクリプトを見ずに言い聞かせるのは難しいですが、クエリに応じてDBに仕事の一部をオフロードすることで、いくつかのことがスピードアップする可能性があります。明らかに多くの情報が必要です。

+0

私はmemmory制限を256mbに増やしました。 PHPのタイムアウトを0にしました。徐々に遅くなり、徐々に遅くなっていきます。ポンプで始まり、次に減速し始めます。スクリプトは約8000行です.. –

0

これは実際にはリークに過ぎません。

あなたの手順は次のようになります。今

Create 4 handlers and give each a connection to the DB 
While you haven't processed the whole DB 
For every handler, execute: 
    Process 400 records 

、限り、あなたは同じ接続を再使用している、とあなたの「プロセス」のステップは、後でそれをリンク解除せずに何かを作成していない、それがあるべきよう永遠に続くことができる。

+0

4ハンドラを作成し、DBへの接続をそれぞれ与えます。 DB全体を処理していない間 すべてのハンドラに対して、次のコマンドを実行します。 プロセス400レコード - これは私が今やっていることです..私は私のmysqlのDBへの永続的な接続を使用し、永続的なタイムアウトは十分な以上の50秒以上であることを確認した。私は4つの並列接続を持っています。データベースを分析した後、ある時点で4つのスレッドのうちの1つだけが処理され、次に他のスレッドが処理されていると考えました。 –

+0

私はカールを何度も使っています。実際には50,000回です。 –

+0

あなたのCURLコードを確認する必要があります。 – DanRedux