1

私は、約 3,000 万のデータベース レコードでかなりの量の作業を行っている非常に長時間実行されるスクリプトを持っています。CLI で起動して実行するたびに、実行している作業量 (約 5,000 レコード/分) を考えると、かなり速く実行されます。ただし、これが約 90 分後には劇的に遅くなり、5,000 レコードを完了するのに 2 時間かかります。再起動すると、約 90 分間正常に動作します。

Apache のログには、速度が低下している時間については何も表示されません。他にどこを見ればよいかわかりません。

コマンド ラインで実行する場合、PHP の最大実行時間は問題にならないはずです。CodeIngiter で 300 に設定されている箇所をコメントアウトしました。set_time_limit(0)スクリプトの先頭にa を追加しました。

私のデータベースは PostgreSQL です。

どこを見るべきかについて何か提案はありますか?

編集:わかりました、間違いなくメモリの問題のようです。しかし、いくつかの配列を使用して結果をキャッシュし、バッチの挿入と更新を行っていますが、後でそれらをクリアしており、90 分を超えるまでに何度も使用されています。

現在メモリ内にあるものを確認する方法はありますか?

編集: これが私の解決策であるかどうかは、あと 90 分間わかりませんが、メモリの問題を抱えている CI ユーザーの場合は、http://codeigniter.com/forums/viewthread/140012/#689396を確認してください。

4

1 に答える 1

2

この関数でメモリ使用量を表示できますmemory_get_usage()

メモリ内で確認できるのは、宣言した配列または変数だけです。)、再利用、または無効化されたものunset(はすべて、ガベージ コレクターによる削除のために追加されます。


私は以前に PHP インポート スクリプトを実行しましたが、おそらくメモリの問題が発生していると思われます。配列を使い終わったら、必ず配列を空にしてください。

タスクをどれだけ楽しみたいかにもよりますが、これはあなたの興味のピークになるかもしれません: http://gearman.org/

Gearman は、作業を実行するのにより適した他のマシンまたはプロセスに作業を委託するための汎用アプリケーション フレームワークを提供します。

于 2012-10-23T14:47:57.317 に答える