• 締切済み

メモリーが足りないのでしょうか?

先の質問番号857で質問した者です。857の問題とは別問題で関連がないと思いましたので別にしました。 同じシステム上での問題です。 PHPとMySQLを連携させた入力登録画面を作成しています。サーバーはRedHatです。ブラウザは、InterNet Explorerです。システム上のメモリは512MBです。しかしRedHatシステム管理者がモニターしてくれた話ではメモリは最高に使われた場合でも100MBは余っているようです。スワップも余っているそうです。そこで、PHPに詳しい方に聞くように言われました。 メッセージだけ見るとメモリーが足りないように見えますが、全くわかりません。 当方頼れる方がいません。宜しくご指導お願いします。 問題 Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 184320 bytes) in /home/websites/a.php on line 228 問題についての補足 こちら問題は、特にこのline 228だけで出るのではなく、一度このエラーが出始めると、不特定多数のPHPプログラムのあらゆる部分で同様のエラーが出始めます。 本当にあらゆる部分です。SQL文を発行しているような特別な部分ではなく、項目を移動しているような、単純な部分で出ます。そしていつも同じ場所で出るのではなく、文字通りいたるところでエラーが頻発します。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.5

<php phpinfo(); ?> ↓ <?php phpinfo(); ?> はてなが一個足りませんねぇ。。

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.4

>こちらは、PHPをRedHatにインストールするときの話だという理解で宜しいいでしょうか? そうです。 >現在のRedはt環境が既にそうなっているかどうかはどうすれば確認できますでしょうか? phpinfo()の結果をブラウザで表示させてphpのバージョンを確認してみてください。 次にphpのパッケージのバージョンを確認してください。 # rpm -q php バージョンが一致すれば、RedHatのパッケージ版phpです。 一致しなければ、新しいバージョンのphpがソースからコンパイル・インストールされています。 >kjournaldというものがいくつも走っていたそうです。 このプロセスは、いつも複数走っています。

maigo100
質問者

補足

xjd さん 初歩的な質問ですいません。 <php phpinfo(); ?> 上記をたとえば、info.phpというファイルに保存し、それをサーバーに転送し、普通にインターネットエクスプローラから実行する、という方法で宜しいいでしょうか? もし正しいのであれば、何も表示されませんでした。結果は、画面が真っ白です。 何が間違っていますでしょうか?

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

> 数日に一度出るのは、857の問題です。 的外れでしたか。失礼しました。 サーバ側にログが残ってないのなら、クライアントからの要求がサーバまで届いていないという事でしょうから、ネットワークの問題では。 ネットワーク管理者に尋ねられてみては。 # 857番って、q=1007960の事かと思ってましたが、違ってたかも。 > 具体的にはどこでどうすれば良いのでしょうか? php.iniの記述内容を変更します。 http://php.planetmirror.com/manual/ja/configuration.php メモリリークについては下記URLを: http://e-words.jp/p/c-os-technology-memory.html 見直す場所は全てになりますが、とくにDBへのクエリ実行後ちゃんとコネクションを解放しているか、大規模な配列をunsetしているか等、使い終わったリソースの後始末を明示的に行っているかという点についてです。 PHP自身のバグというのも考えられます。 あんまりパフォーマンス要求が高くなければ、mod_phpじゃなく、CGI経由でのphp単独実行にしてみるとか。メモリの制約にひっかかりにくくなります。

参考URL:
http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=Fatal+error%3A+Allowed+memory
maigo100
質問者

補足

osamuy さん ありがとうございます。 ネットワークの問題ではありえないようです。理由は、この問題が起きているときにそれぞれのPCでアクセスに問題があるのは、このサーバーだけだからです。 ># 857番って、q=1007960の事かと思ってましたが、違ってたかも。 その通りです。こちらの問題が解決すれば、867番も解決するのでしょうか? >とくにDBへのクエリ実行後ちゃんとコネクションを解放しているか、 mysql_free_result()の発行のことでしょうか? >大規模な配列をunsetしているか等、 こちらはどのようにすればよいでしょうか?具体的なコマンドをご存知であれば教えてください。 また、追加情報ですが、システム管理者が問題が出ているときに「TOPコマンド」を使ってみたところ、kjournaldというものがいくつも走っていたそうです。こちらは何かのヒントになりますでしょうか? 宜しくお願いします。

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

phpをソースからコンパイル・インストールするときに、configureを実行しますが、 ヘルプを確認してください。 # ./configure --help <ENTER> --enable-memory-limit   Compile with memory limit support. このオプションを指定してコンパイルすると、php.iniファイルで、 以下の指定が有効(使えるように)になります。 [php.ini] memory_limit = 8M

maigo100
質問者

補足

xjdさん ありがとうございます。こちらは、PHPをRedHatにインストールするときの話だという理解で宜しいいでしょうか? そうであれば、現在のRedはt環境が既にそうなっているかどうかはどうすれば確認できますでしょうか? また、追加情報ですが、システム管理者が問題が出ているときに「TOPコマンド」を使ってみたところ、kjournaldというものがいくつも走っていたそうです。こちらは何かのヒントになりますでしょうか? 宜しくお願いします。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

PHPのリソース制限に引っかかっているのでは。 メモリリークを起こしている恐れがありますので、スクリプトを見直してみたり、PHPをアップデートしてみるとか。 >857の問題とは別問題で関連がないと思いましたので別にしました。 っていうか、これが原因では。

参考URL:
http://php.planetmirror.com/manual/ja/ini.sect.resource-limits.php
maigo100
質問者

補足

osamuy さん アドバイスありがとうございます。参考URLも行ってみましたが良くわかりません。「このディレクティブを使うためにはコンパイル時に有効にしておく」とありますが、具体的にはどこでどうすれば良いのでしょうか? 下を含め質問ばかりですいません。本当に助けが必要なんです。 また、メモリリークとはなんですか?PHPをアップデートというのは最新版にするという意味でしょうか? 何よりもスクリプトを見直すには、どのようなポイントに気をつけたら良いですか?とても長いプログラムです。 「これが原因では。」とのことですが、実はこちらのエラーはほとんど出ないのです。数日に一度出るのは、857の問題です。こちらの問題はほとんど出ないというくらい出ません。ただ昨日は同じ時間帯に同時に出ました。過去を含めて始めてのことでした。 宜しくお願いします。

関連するQ&A