• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Linux系OSのメモリの解放について)

Linux系OSのメモリの解放について

このQ&Aのポイント
  • CentOS6.4を使ってPHPアプリを動かしています。結構メモリを消費するアプリなので、使っているうちにOutOfMemoryになることがあります。正常終了する場合もあります。メモリの解放が適切に行われていないようで、freeコマンドで見たときにusedが減りません。
  • アプリケーション実行前のメモリ使用状況と比べてもusedの値が減らないため、apacheを再起動する以外に他のメモリ解放方法があるか知りたいです。
  • また、メモリが解放されないメカニズムについても教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>apacheを再起動すればusedは減るのですが、 >他にusedになっているメモリを開放する方法はあるのでしょうか? ないです。 >また、どのようなメカニズムで解放されないのか教えていただけるとありがたいです。 多くの場合、プログラムがOSから借り受けたメモリはプログラムが終了するまでOSには返さず、 再度必要になったときのために備えておきます。

freeradical
質問者

お礼

ありがとうございまいした。

freeradical
質問者

補足

そうですね。 OutOfMemoryで異常終了したときにメモリが解放されないという点についてはご説明のとおりで納得なのですが、正常終了しているケースでも解放されないとい点で、疑問を感じたものですから質問を投稿しました。

その他の回答 (3)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

>OutOfMemoryで異常終了したときにメモリが解放されないという点についてはご説明のとおりで納得なのですが、正常終了しているケースでも解放されないとい点で、疑問を感じたものですから質問を投稿しました。 私が#2で書いた「プログラムの終了」というのは、今回の件でいえばphpモジュールを組み込んでいるapacheの事です。 あなたのいう「phpアプリ」の事ではないです。 phpアプリを動かしているプログラムといえばわかります?

freeradical
質問者

お礼

ありがとうございました。

freeradical
質問者

補足

理解しました。 ついでに言えば、前回のご回答がヒントになりました。 apacheのMPM関係のパラメータをデフォルトにしていたのですが、apacheのプロセスが残る場合があるようですね。 現在は以下のとおり極端に小さい値で試行していますが、、 とりあえずメモリは解放されるようになりました。 <IfModule prefork.c> StartServers 1 MinSpareServers 1 MaxSpareServers 1 ServerLimit 1 MaxClients 1 MaxRequestsPerChild 1 </ifModule>

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

Linuxでは空きメモリをページキャッシュに使用します。 ページキャッシュとは、ファイルI/O を高速に行うため、最近参照 したファイルの内容のメモリ上へのキャッシュです。ページキャッ シュはメモリ領域を専有しますが、他でメモリ必要になった場合は 開放される領域なので、空き領域として計上することができます。 ですから、厳密ではありませんが、freeを使ってメモリ使用量を算 出したい場合は、usedではなく、total - free - buffers - cached で算出する必要があります。 ところで下記で強制的にページキャッシュを開放できますが、通常 はこれをやるメリットはありません。 # echo 1 > /proc/sys/vm/drop_caches

freeradical
質問者

お礼

ありがとうございました。

freeradical
質問者

補足

なるほどです。 たしかに -/+ buffers/cache: 1527988 14806672 となっていますね。 また、教えていただいた方法でページキャッシュを開放してみましたが、 元のキャッシュ容量が大きくないので、 格段に空きが増えるわけではないですね。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

PHPはapacheのモジュールでうごいているのでしょうか? またtopで観察していても変化はないでしょうか?

freeradical
質問者

お礼

ご返信ありがとうございます。

freeradical
質問者

補足

PHPはモジュール版です。 LoadModule php5_module modules/libphp5.so topで見ていても変化はありません。 質問の投稿から1時間経過しても以下のとおりです。 top - 14:09:42 up 22:25, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 16334660k total, 1756508k used, 14578152k free, 108768k buffers Swap: 2047992k total, 0k used, 2047992k free, 120696k cached

関連するQ&A