0

メモリリークが疑われる別のコードベースの機能を使用する大規模なインポートスクリプトを作成しています。同じ操作でコードベースを10000回も呼び出します。最初の操作は比較的高速(2秒)ですが、スクリプトの実行には長い時間がかかり(100時間以上、カウント)、最後には同じタスクが実行されます。 60秒以上(そしてまだ登っている)。リークが検出されて修正されている間にこれを回避するための最良の方法は何ですか?

ブレーンストーミングされたいくつかの解決策は次のとおりです。

スクリプトの一部を実行するプロセスを作成してから終了し、使用したリソースを再利用します。

シェルスクリプトを使用してプログラムを複数回起動し、毎回タスクのサブセットを完了し、更新されたデータをファイルに出力して、次の反復で使用できるようにします。

編集:インポートとコードベースが別々のプログラムであることを明確にするために、質問の表現方法を変更しました

4

2 に答える 2

2

ご存知のとおり、提示した証拠のいずれも、ストレージのリークを明確に示していません。実際の問題は、アルゴリズムの設計が不十分な場合や、データベーステーブルやクエリの調整が不十分な場合など、まったく異なるものである可能性があります。

これがストレージリークであると想定し、「バンドエイド」ソリューションを適用することは時間の無駄であるか、実際に問題を悪化させる可能性があります。

一連の回避策を試すよりも、前もって時間をかけて実際の問題を特定して修正する方がよいでしょう...これは無駄であることが判明する可能性があります。

于 2012-07-23T11:16:40.700 に答える
0

他のコードベースへの参照を含むスコープを最小化することで、この問題を解決しました。基本的に、オブジェクトを初期化するか、他のコードベースから関数を呼び出すたびに、可能な限り最小限の時間存在することを確認するためにフープを実行しました。多くの場合、すべての参照が削除されたことを確認するために、参照を再度NULLに設定します。

これは最終的にはうまく機能し、時間を150時間以上から30時間未満に短縮しました。

于 2012-12-09T10:44:58.143 に答える