0

ネイティブ php で書かれたスムーズに動作する古い facebook アプリがあります。

今月は zend-framework 2 で書き直すことにしました。昨日、新しいアプリに切り替えた後、多くのメモリ不足エラーでサーバーがクラッシュしました。そこで、古いアプリに戻りました。

アプリをプロファイリングするために xdebug をインストールしました。memory_get_peak_usage() 関数を使用すると、メモリ使用量が多いことに気付きました。

古いアプリでは、静的ページは 1 MB のメモリしか使用しません。しかし、同じページで約7〜8 MBを使用する新しいもの。

webgrind の上位 2 行は次のとおりです。

   Function                                     Invocation Count    Total Self Cost    Total Inclusive Cost
   Composer\Autoload\ClassLoader->loadClass     224                 23.31       47.20
   Composer\Autoload\ClassLoader->findFile      224                 9.57        10.23

Apacheのabツールも試してみました

   ab -n 50 -c 5 -C PHPSESSID=SESSIONID http://myhost.com

結果は次のとおりです。

   Percentage of the requests served within a certain time (ms)
   50%    368
   66%    506
   75%    601
   80%    666
   90%   1073
   95%   1812
   98%   2278
   99%   2278
   100%   2278 (longest request)

これらはすべて、localhost ではなく実稼働サーバーに起因します。

1 ページあたり 7 ~ 8 MB は正常ですか? そうでない場合、どうすれば減らすことができますか?zf2またはcomposerで探す必要がありますか?

必要に応じて、コード サンプルを提供できます。ありがとうございました。

4

2 に答える 2

2

ソリューションをネイティブから Zend に移行するときは、Zend の仕組みを認識しておく必要があります。

Zend は多くのクラスで構成されており、ネイティブ/軽量構造の代わりにオブジェクトを使用すると、使用されるメモリが増加します。

メモリの使用を改善するには、コードを見直して次のことを行います。

  • 一部のコードを関数でラップすると、ガベージ コレクターが未使用のオブジェクトをメモリから削除するのに役立ちます。
  • オブジェクトの大きなリストを印刷する前に配列に格納しないでください。その場で印刷します。
  • ループ内でのオブジェクトの作成 ('new' の呼び出し) を制限します。

これが役に立ちます。

于 2013-02-07T10:53:19.617 に答える
0

私は問題を理解するために一日を費やしました。xdebug、xhprofを試しました。コードに問題はありませんでした。

2.0.0 に戻し、問題を解決しました。新しいバージョンの何が問題なのかわかりませんが、今のところ 2.0.0 に固執します。

全体的なメモリ使用量は約 4 MB で、クラッシュはありません。

composer.json:

"zendframework/zendframework": "2.0.0", 
于 2013-02-11T09:02:51.043 に答える