2011-07-02 16 views
9

私は自分のWebアプリケーションにログインすると、それはのようなエラーを示しています。致命的なエラー:134217728バイトの許可メモリサイズが使い果たさ(87バイトを割り当てしようとした)

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 87 bytes) in /gt/2.ps.fo/home/hft/domains/console.fo.spalgo.com/public_html/cake/libs/model/datasources/dbo/dbo_mysql.php on line 775

は、この問題を解決するためのいずれかの解決策はありますか?このエラーが発生するのはなぜですか?

+0

これは、使用可能なすべてのメモリを使い切っていることを意味しています。メモリを少なくしたり、メモリを少なくするように修正してください。 – deceze

答えて

9

です。リンク先のページに記載されているように、サイトphp.inimemory_limit設定を編集します。

ユーザーまたはグループのリソース制限がsetrlimit(2)に達している可能性があります。 /etc/security/limits.confには、Webサーバー用に設定されている可能性のある制限と、サーバー環境およびPHPインタープリタ環境を起動する初期化スクリプトがあります。

+0

両方のステートメントは可能性が高いですが、メモリの制限に関連する可能性が高くなりますが、それを増やすだけで解決できると思っています。 。あなたの答えを補完するために、別の答えを追加しました。 – AlphaZygma

+0

@AlphaZygma、ありがとう。 – sarnold

1

まず、変数に印刷するものを保存する代わりに、echoを使用してみてください。

1
ini_set('memory_limit', '-1'); 
+0

-1にすると、メモリが無制限になり、リークする可能性があります。この設定を避け、選択肢がないときに使用してください。 –

1

致命的な例外(dbo_mysql.php)私はあなたの呼び出しは、データベースからデータを取得していることを推測を投げたファイルを見てみます。

また、メモリの上限を見ると、134217728バイト(128MB)と表示されます。したがって、APIコールが行っている処理のすべてが、スクリプトごとに割り当てられた制限を上回るデータをたくさん取得しようとしています。
たとえば、API呼び出しスタックの最後のスクリプトが20MBを必要としていて、115MB相当のDBからデータを取得しようとしている場合、スクリプトは135MBを既に割り当てようとしています。これはすでにその結果、Fatal Exceptionが発生します。

だから、私はやる/チェックするためにいくつかのことを参照してください。

  1. あなたは、不要なデータを取得していない、つまり、あなたが必要なものだけ取り出します。
  2. あなたは確かにすべてのデータが必要な場合は、その後、
    • どちらかあなたのphp.iniファイル
      コン下memory_limit価値を高める:あなたのデータが増え続けている場合、あなたは一つだけのために、この値を更新し続ける必要があるかもしれませんスクリプトを実行して自分自身をメモリリークやメモリ不足に曝すことがあります。
    • または(メモリ制限を確認しながら)ページ分割を実装して、アプリケーションのスケーラビリティを向上させることをお勧めします。
関連する問題