4

PHPですべてのリソースをクリアすることは可能ですか?

これらのリソースを簡単にクリアできる unset を使用してget_defined_varsを使用して、定義済みのすべての関数を取得できることを私は知っています。

しかし、それだけでは十分ではありません。多くの機能を実行するために長時間(〜1時間30分)実行するスクリプトがあります..しかし、実行中にスクリプトはもはや重要ではない情報を収集しました..スクリプトは製品をエクスポートし、それぞれ約0.2MB〜0.5MBを取得します製品 (3200 製品)

これは、600MB を超えるメモリ使用量です。スクリプトをできる限り最適化しましたが、小さくはなりません。

get_included_filesまたはget_declared_classesを使用して、含まれているすべてのファイルを取得できます。これらの情報をクリアすることは可能ですか? より多くの RAM を解放できるように、クラス (オートローダー クラスなどの必須の一部を除く) またはその他の含まれているファイルを削除しますか?

または、実行中にサーバーの使用を最適化する他の方法を知っていますか?

ばかげた質問かもしれませんが、PHP スクリプトのパフォーマンスを改善するための各ヒントをいただければ幸いです。

スクリプト環境の情報: スクリプトは、キャッシュとパフォーマンスに大きな問題がある古い Magento バージョン 1.4 で実行されます。現在、新しいバージョンへの更新はできません。

4

3 に答える 3

2

明確なリソース/メモリには多くの機能があります:

unset()変数の場合

mssql_free_resultSQLの場合

memory_get_usage()現在PHPスクリプトに割り当てられているメモリの量(バイト単位)。

等...

すべてを混ぜると、メモリ/リソースを減らすことができます。

于 2012-08-01T14:59:54.467 に答える
2

最大 2GB のメモリを消費し、狂ったようにメモリをリークするスクリプトがありました (これは Doctrine 1.1 を使用しています)。

unset()ingできる限りのことを行った後、スクリプトの先頭と戦略的な場所に追加しgc_enable()ましたgc_collect_cycles()

これは、使用済みメモリの一部を再利用するのに役立ちましたが、スクリプトの速度が少し低下しました。

于 2012-08-01T15:00:58.680 に答える
1

問題は変数ではなくアルゴリズムに依存します。

スクリプトは、すべての値を、エクスポートされたファイルでシリアル化される大きな「製品オブジェクト」配列に累積します。

メモリに精通しているためには、シリアル化する前にすべての製品を累積してアレイにエクスポートするのではなく、ビルドした各製品をシリアル化する方がよいでしょう。

于 2012-08-01T14:56:50.943 に答える