お世話になります。

CentOS6.4を使ってPHPアプリを動かしています。

結構メモリを消費するアプリなので、
使っているうちにOutOfMemoryになることがあります。
※正常終了する場合もあります。

正常に終了しようがOutOfMemoryになろうが、
大量にメモリを確保した後は、そのまま解放されていないように見えます。

例えば、freeコマンドで見たときにに usedが減りません。


【例】
アプリケーション実行前
# apachectl restart

# free
total used free shared buffers cached
Mem: 16334660 472788 15861872 0 105700 120124
-/+ buffers/cache: 246964 16087696
Swap: 2047992 0 2047992

ここでアプリケーション実行し正常に終了。

# free
total used free shared buffers cached
Mem: 16334660 1754276 14580384 0 106836 120484
-/+ buffers/cache: 1526956 14807704
Swap: 2047992 0 2047992


apacheを再起動すればusedは減るのですが、
他にusedになっているメモリを開放する方法はあるのでしょうか?

また、どのようなメカニズムで解放されないのか教えていただけるとありがたいです。


よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>apacheを再起動すればusedは減るのですが、


>他にusedになっているメモリを開放する方法はあるのでしょうか?

ないです。

>また、どのようなメカニズムで解放されないのか教えていただけるとありがたいです。

多くの場合、プログラムがOSから借り受けたメモリはプログラムが終了するまでOSには返さず、
再度必要になったときのために備えておきます。

この回答への補足

そうですね。

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

補足日時:2014/07/04 09:10
    • good
    • 1
この回答へのお礼

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

お礼日時:2014/07/04 09:10

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



私が#2で書いた「プログラムの終了」というのは、今回の件でいえばphpモジュールを組み込んでいるapacheの事です。
あなたのいう「phpアプリ」の事ではないです。
phpアプリを動かしているプログラムといえばわかります?

この回答への補足

理解しました。

ついでに言えば、前回のご回答がヒントになりました。

apacheのMPM関係のパラメータをデフォルトにしていたのですが、apacheのプロセスが残る場合があるようですね。

現在は以下のとおり極端に小さい値で試行していますが、、
とりあえずメモリは解放されるようになりました。


<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 1
ServerLimit 1
MaxClients 1
MaxRequestsPerChild 1
</ifModule>

補足日時:2014/07/07 11:48
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/07/07 11:48

Linuxでは空きメモリをページキャッシュに使用します。



ページキャッシュとは、ファイルI/O を高速に行うため、最近参照
したファイルの内容のメモリ上へのキャッシュです。ページキャッ
シュはメモリ領域を専有しますが、他でメモリ必要になった場合は
開放される領域なので、空き領域として計上することができます。

ですから、厳密ではありませんが、freeを使ってメモリ使用量を算
出したい場合は、usedではなく、total - free - buffers - cached
で算出する必要があります。

ところで下記で強制的にページキャッシュを開放できますが、通常
はこれをやるメリットはありません。

# echo 1 > /proc/sys/vm/drop_caches

この回答への補足

なるほどです。

たしかに
-/+ buffers/cache: 1527988 14806672
となっていますね。

また、教えていただいた方法でページキャッシュを開放してみましたが、
元のキャッシュ容量が大きくないので、
格段に空きが増えるわけではないですね。

補足日時:2014/07/04 08:55
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/07/04 08:55

PHPはapacheのモジュールでうごいているのでしょうか?



またtopで観察していても変化はないでしょうか?

この回答への補足

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

補足日時:2014/07/03 14:16
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/07/03 14:16

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qグラフィックカードの選び方とメモリ増設の場合のメモリの選び方

現在、親が使用しておりますデスクトップコンピュータ(e-Machine J2708)に、メモリ増設+グラフィックカードの取り付けをしたいと思っています。

取り付けはできるかなと思っているのですが、
選び方が他のサイトをみてみてもよくわかりません。 
よろしくお願いいたします。

質問1: メインメモリはPC2100 DDR-SDRAM 256MB (最大2GB)
となっております。 ウェブサイトではPC2100には
DDR値により266、333、400などとありましたが
どれでもいいのでしょうか?

質問2: つくも電機のサイトでは、
PC3200 DDR DSRAM (DDR400)を使える
コンピュータとしてe-MachinesのJ2708も紹介してありましたが、
PC3200でもよいのでしょうか?
PC2100とどちらがよいのでしょうか。

質問3: グラフィックカード(AGP 4x)の選び方がまったくわからずお手上げです。
価格コムにある5000円以下のAGP4Xのビデオカードの中から
選ぶ、というような選び方でも大丈夫でしょうか? 
どれでも大丈夫なのでしょうか?
(ちょっと処理速度を早くしたい、というだけで、
特にゲームなどするわけではありません)

[使用しているコンピュータ -スペックはウェブサイトよりコピー]
イーマシーンズeMachines J2708 
メインメモリ: PC2100 DDR-SDRAM 256MB (最大2GB) メモリスロットx2 (空きx1)  ※1
グラフィックシステム: Intel(R) エクストリームグラフィックス AGP 3D (Intel(R) 845GE内蔵)
ビデオメモリ: 最大64MB (メインメモリと共用)※2
※1 最大容量増設時は初期メモリを外しての増設になります。メインメモリの一部はビデオシステムとして使用されます。
※2 ビデオメモリはメインメモリの一部を使用。実際のビデオメモリサイズはシステムによって自動的に決定されます。

[上記以外の基本スペック ]
OS: Windows(R) XP Home Edition
CPU: Intel(R) Celeron(R) プロセッサ 2.70 GHz
チップセット: Intel(R) 845GE チップセット
2次キャッシュ: 128KB (CPU内蔵)
グラフィックシステム: Intel(R) エクストリームグラフィックス AGP 3D (Intel(R) 845GE内蔵)
ハードディスクドライブ: 80GB (ATA100 / 5,400rpm)
シリアルポートx1、パラレルポートx1、PS/2ポートx2 (キーボードx1、マウスx1)、
オーディオ入出力 (前面:マイク入力x1、ヘッドホン出力x1、
背面:マイク入力x1、スピーカ (ヘッドホン)出力x1、ライン入力x1)
拡張スロット PCIスロットx3 (空きx2)、AGPスロットx1 (空きx1)
電源容量 300W
外形寸法 184 (W)×406 (D)×362 (H)mm (本体、突起物含まず)
重さ 約10.4kg
==

現在、親が使用しておりますデスクトップコンピュータ(e-Machine J2708)に、メモリ増設+グラフィックカードの取り付けをしたいと思っています。

取り付けはできるかなと思っているのですが、
選び方が他のサイトをみてみてもよくわかりません。 
よろしくお願いいたします。

質問1: メインメモリはPC2100 DDR-SDRAM 256MB (最大2GB)
となっております。 ウェブサイトではPC2100には
DDR値により266、333、400などとありましたが
どれでもいいのでしょうか?

質問2: つくも電機のサイトで...続きを読む

Aベストアンサー

>質問1:メインメモリはPC2100 DDR-SDRAM 256MB (最大2GB)
>質問2:PC3200でもよいのでしょうか?
DDRxxxといった場合、メモリチップの動作周波数になります。
 例:DDR266→266MHz
PCxxxxといった場合、メモリモジュールの最大転送速度になります。
 例PC2100→2.1GB/s
要はチップとモジュールの違いですね。
もちろん、DDR266とPC2100は同義として扱っていいと思います。

PC3200の場合、よほど粗悪なメモリでない限り、SPDというものにPC2100とPC2700のデータを持っています。
当然、PC2700はPC2100とPC2700のデータを持っています。
つまり、PC3200でも(粗悪なメモリ以外)使うことが出来ます。
ただし、チップセット(というよりMB)がサポートしている速度に限定されます。
この場合は、PC2100でしょうか。
また、混在した場合は遅い方の速度で動作します。

今後の流用を考えてもDDRは使わないでしょうから、安い方を選べばいいと思います。
(DDRIIもしくはDDRIIIが主流ですので)

メモリスロットの空きが一つなので、1Gを増設すれば快適になると思います。


>質問3:価格コムにある5000円以下のAGP4Xのビデオカードの中から選ぶ、というような
可能ですよ^^
ただし、5000円以下となるとRADEON7000ぐらいしかないですね。
1万円だせば、MATROXのG450が今でも買えますね。
また、AGPではなくPCI接続のグラフィックカードという手もありますね。

どちらにしても、オンボードからグラフィックカードに変えると体感速度が全然違います。
デスクトップの描画(2Dですが)がもたつかないからです。
CPUを2ランク上げたぐらいの体感速度が得られます。
グラフィックカードへの交換はメモリ増設の次にお勧めです。

>質問1:メインメモリはPC2100 DDR-SDRAM 256MB (最大2GB)
>質問2:PC3200でもよいのでしょうか?
DDRxxxといった場合、メモリチップの動作周波数になります。
 例:DDR266→266MHz
PCxxxxといった場合、メモリモジュールの最大転送速度になります。
 例PC2100→2.1GB/s
要はチップとモジュールの違いですね。
もちろん、DDR266とPC2100は同義として扱っていいと思います。

PC3200の場合、よほど粗悪なメモリでない限り、SPDというものにPC2100とPC2700のデータを持っています。
当然、PC2700はPC2...続きを読む

QWindows系又はLinux系のOSのレンタルサーバーでPHPの環境をととのえるには

私はPHPの環境の整ったところでしかプログラミングをしたことがないため、PHPの環境をどのように手配したらいいのかわらりません・・・。
どうしたらいいでしょうか??

そもそもレンタルサーバーでメールの送受信のテストなどは可能でしょうか?

Aベストアンサー

PHP対応のサーバなんてあるのかな?
と思っていたのですが、調べるといろいろありそうですね。
いろいろまとめたページがありましたので、ご参考までに。

参考URL:http://phpspot.net/php/rentalserver.php

Q増設メモリの選び方

今回、東芝ダイナブックサテライトB450というノートパソコンを購入しました。
型式はこちらです↓
PB450CJBBR5A31

どうやら、メモリを増設したほうが快適に使えるとのことなので、
トライしてみようと思うのですが、選び方がわかりません。

ただ、アマゾンで「この商品を買った人はこちらの商品も
購入しています」として、このメモリがあがっているのですが、↓
http://www.amazon.co.jp/gp/aw/d/B002ZNKDRU/ref=mp_bxgy_p_dp_y
こちらを購入して増設して本当にOKなんでしょうか??
きわめて初歩的でおかしな質問ですみません。

Aベストアンサー

http://buffalo.jp/search/pcnew/index.php?id=80872&category[]=2&type[]=4&form_name=memory&action_index_detail=true

対応してますね。

QCentOS6.4 フォーマット失敗する。

こんにちは、このたびはお世話になります。


CentOS6.4をサーバーにインストールする際に必ずフォーマットが失敗してしまいます。

発生タイミングとしては以下になります。
・言語設定→ホスト名設定→地域設定→root設定→インストールタイプ設定→エラー

インストールタイプは「すべての領域を使用する。」
「既存のLinuxシステムを入れ替える」どちらを選んでもエラーが表示されます。

エラーメッセージは以下になります。

デバイス /dev/mappaer/ddf1_MegaSR R1 #Op1をフォーマット中にエラーが発生しました。
invalid device specification

この後の画面に”anacondaインストーラが失敗しました”的なメッセージが表示されておりました。


お手数をおかけしますが、何かご存知の方が居られましたら情報をお願いします。

Aベストアンサー

http://www.lesstep.jp/wiki/index.php?PRIMERGY%20RX100%20S6%E3%81%A7RAID%E3%81%8C%E8%AA%8D%E8%AD%98%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84
http://support.ts.fujitsu.com/Download/Index.asp?lng=COM

Primagyということなので、上記2番めのリンクからドライバを入手してください。

#1の回答の中に、「ドライバの読み込み」というリンクがありますのでそちらと合わせて参照してください。

QPCのメモリ増設の際の選び方を教えて下さい。

PCのメモリの増設を考えているのですが、どれが良くてどれが悪いのか分かりません。

現在、使用しているPCはacerのAspire M3970です。
メモリは最初からついていたDDRS SDRAM DDR3-1333 PC3-10600 2GBが2枚です。
16GBまで増設出来るようなので、4GBのメモリを2枚増設したいと思っています。

ヤフオクでメモリを購入しようと思っているのですが、
どれを選んでいいのか分かりません。

例えば
Kingstonメモリ 4G PC3-8500
hynixメモリPC3-10600U 4GB
SAMSUNG メモリPC3-10600U 4GB
サムスン DIMM DDR3 SDRAM PC3-12800 4GB
など此方の商品らは増設しても問題なく動くのでしょうか?

詳しい方いたら教えて下さい。
宜しくお願いします。

Aベストアンサー

http://www.acer.co.jp/ac/ja/JP/content/model-datasheet/DT.SJYSJ.001
Aspire M3970
DDR3-1333/PC3-10600

http://www.sofmap.com/product_detail/exec/_/sku=11492887/-/gid=PS08020000/-/scmp=kkc/-/eVar3=LSSPR
CFD W3U1333Q-4G (PC3-10600-4GBx2)
販売価格:\3,480 (税込)
メーカ製各種保証付、リテールメモリ

今は、メモリ安いので普通に保証付のメーカ製を買いましょう。

QCentOS6.4インストールについて

教えてください。

CentOS6.4のインストールで、パーティションを分けずに一つでインストールするように
言われています。
インストール画面途中で、パーティションの設定らしき画面があり、
先ず、"すべての領域を使用する"というものを選択すると思われます。
その後の設定でLVMの設定などがありますが、
どのように設定していけば良いか、教えていただけないでしょうか。
よろしくお願いします。

Aベストアンサー

「パーティション」の定義によるな。その言葉は2つの意味に解釈できる。

・「/」以下全てのファイルが一つのファイルシステムに入っている。
・ディスクのパーティション1にLVMして、「/」も「/boot」もSWAPもその中の論理ボリュームとして作成する。

正直前者なのかな~と受け取ったのだが、パーティションを分けずに一つでインストールするようにあなたに言った人に聞かないと本当のところは分からないね。

前者だった場合は、LVMを使うか使わないかの判断がいる。後者の場合はディスク全体をLVMで取り、後は論理ボリュームを切り出してSWAPに実メモリと同じか2倍程度、残り全部を「/」にすればいいんじゃないか。

素直に言葉を受け取ると、全ての領域を指定でその後は何もせずに前に進めばよいような気もするけど・・・・。

Q増設用メモリの選び方

つい最近、NECのVALUESTAR N VN570/JGを譲っていただいたので、
それのメモリを増設しようと考えています。
しかしネットで検索すると同じようなものが沢山出てきてしまい、
どれを買えばよいのか検討もつきません。

電機屋さんで機種さえ伝えれば、ちゃんと対応メモリを教えていただけるものなのでしょうか?
そうでないのでしたら、対応メモリ・おすすめのメモリを教えていただけるとありがたいです。

初歩的な質問ですみません。
どなたがご教授お願いしますm(_ _)m

Aベストアンサー

周辺機器メーカの有名どころを2つご紹介します。

●BUFFALO製品メモリ検索
http://buffalo.jp/products/catalog/memory/
●IOデータ製品メモリ検索
http://www.iodata.jp/promo/memory/

こちらで、お持ちのパソコンの型番を入れて調べて下さい。
対応メモリが見つかったら、その型番をメモしていって店頭で聞いたり
ネットで価格を調べてお買いになるとよいでしょう。

質問者様があまりメモリについて詳しくないのなら、店頭でアドバイスを受けてから買うのが無難です。

QCentOS6.4用のrpmfusionを入れたい

のですがどのようにすればよいでしょうか?
CentOS6.4用のrpmfusionをインストールする方法を教えてください.

よろしくお願いします.

Aベストアンサー

「rpmfusion」で検索したら、
http://rpmfusion.org/Configuration/
ってページが見つかって…ちゃんと書かれていますけど?
6.4限定ではありませんが。
# 検索結果に「CentOS 6.2 に RPM Fusion」ってページもありますね。

Q初めてのメモリ増設、選び方がわかりません

時々重く感じるので、パソコンのメモリ増設を考えてますがどれを選べば使えるのかわかりません。

現在の環境
OSはWindows XP 32bit版
パソコンはFRONTIERのデスクトップ、型番はKZMZ5203/CST(BTOです。そのためなのかバッファローなどのメモリを調べるページでわかりませんでした)

メモリはDDR2-SDRAM PC6400 1GB×2

2GBを4GB(2GBを2枚)にしたいのですが、どういうものを買えばいいのですか?
現在ささっているDDR2-SDRAM PC6400というものと同じ規格のものを探せば問題なく使えるのでしょうか?

よろしくお願いします。

Aベストアンサー

>現在ささっているDDR2-SDRAM PC6400というものと同じ規格のものを探せば問題なく使えるのでしょうか?
使えます。下のHPがバッファロー社HPの上の規格のページです。

ただ、こういう国内メーカが販売しているメモリは、値段がとても高い(市場価格に比べて)です。
中古の品などを売っている店だと、桁が下のHPと1つくらい違ったりします。

今、私はDDR2で1GBを1枚積んでXPを動かしていますが(結構遅いのですww)、超大安売りの日に¥1000で買いました。
値段が値段なので、ダメもとで買ってつけてみましたが、不自由なく動いたので、もう1枚買っておけばよかったと後悔したりもしてます。

でも、とりあえずは、バファロー社や、IO・DATA社のモノを搭載すれば、動作の”保証”はしてくれるはずなので、間違いないとは思います。

参考URL:http://buffalo.jp/products/catalog/item/d/d2_800/

QCentOS6.4で/commonを作成するために

# blkid /dev/sda15
/dev/sda15: LABEL="common" UUID="fe42998e-561c-4479-be40-e6898ff2e2df" TYPE="ext4"
#

を踏まえて

/etc/fstab:
UUID=b21c203b-9193-49df-a87d-4554c3034455 / ext4 defaults 1 1
UUID=a64ac5e5-aa80-4560-bf44-2add3aa4a5f6 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0



/etc/fstab:
UUID=b21c203b-9193-49df-a87d-4554c3034455 / ext4 defaults 1 1
UUID=fe42998e-561c-4479-be40-e6898ff2e2df /common ext4 defaults 1 2
UUID=a64ac5e5-aa80-4560-bf44-2add3aa4a5f6 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0

に修正しましたが
/common
が修正後再起動しても現れません.
/common
を作成するにはどうしたらいいのでしょうか?

起動時のlogは以下の通りでした.

# cat /var/log/boot.log
Welcome to CentOS
Starting udev: [ OK ]
Setting hostname fx8350.box: [ OK ]
Setting up Logical Volume Management: No volume groups found [ OK ]
Checking filesystems
centos6.4-a: clean, 115280/2097152 files, 1186284/8388608 blocks
common: clean, 11/33554432 files, 2156568/134217728 blocks [ OK ]
Remounting root filesystem in read-write mode: [ OK ]
Mounting local filesystems: mount: mount point /common does not exist [FAILED]
Enabling local filesystem quotas: [ OK ]
Enabling /etc/fstab swaps: [ OK ]
Entering non-interactive startup
Calling the system activity data collector (sadc):
ip6tables: Applying firewall rules: [ OK ]
iptables: Applying firewall rules: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0:
Determining IP information for eth0... done. [ OK ]
Starting portreserve: [ OK ]
Starting system logger: [ OK ]
Enabling ondemand cpu frequency scaling: [ OK ]
Starting irqbalance: [ OK ]
Starting rpcbind: [ OK ]
Starting kdump: [ OK ]
Starting system message bus: [ OK ]
Setting network parameters... [ OK ]
Starting NetworkManager daemon: [ OK ]
Starting NFS statd: [ OK ]
Starting RPC idmapd: [ OK ]
Starting cups: [ OK ]
Mounting other filesystems: mount: mount point /common does not exist [FAILED]
Starting acpi daemon: [ OK ]
Starting HAL daemon: [ OK ]
Retrigger failed udev events [ OK ]
Loading autofs4: [ OK ]
Starting automount: [ OK ]
Enabling Bluetooth devices:
Starting sshd: [ OK ]
Starting postfix: [ OK ]
Starting abrt daemon: [ OK ]
Starting crond: [ OK ]
Starting atd: [ OK ]
Starting certmonger: [ OK ]
#

よろしくお願いします.

# blkid /dev/sda15
/dev/sda15: LABEL="common" UUID="fe42998e-561c-4479-be40-e6898ff2e2df" TYPE="ext4"
#

を踏まえて

/etc/fstab:
UUID=b21c203b-9193-49df-a87d-4554c3034455 / ext4 defaults 1 1
UUID=a64ac5e5-aa80-4560-bf44-2add3aa4a5f6 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc ...続きを読む

Aベストアンサー

>mount point /common does not exist

「マウントする為のディレクトリが無い」って言ってますけど……。

>/etc/fstab
>に記述したら起動時に自動的に作成されるのではないでしょうか?

起動時に指定のディレクトリにマウントはしますが、ディレクトリの自動作成まではしませんよ。

というか、/etc/fstab書き換えたのなら、再起動する前に
mount -a
で正常にマウントできるか確認できるかと思いますけど……。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報