
Ubuntu日本語フォーラム

ログインしていません。
バージョン:Ubuntu9.04
PC :DELL(Inspiron700m)
シェル端末を起動し、topコマンドを実行して、メモリの使用量を監視しています。
私のPCはメモリを1GB搭載しているのですが、GNOME起動時にすでに800MBほど利用しています。
FireFoxやアプリケーションを利用するとすぐに1GBを使いつくし、SWAP領域を利用しはじめます。
※アプリケーションを実行するタイミングでは、まだメモリに余裕があります。
しかしながら、時間が経過するとともに、どんどん使用量が増加しています。
top - 17:06:47 up 19 min, 2 users, load average: 0.43, 0.48, 0.47
Tasks: 145 total, 3 running, 142 sleeping, 0 stopped, 0 zombie
Cpu(s): 7.3%us, 3.3%sy, 0.3%ni, 89.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1009468k total, 974512k used, 34956k free, 164100k buffers
Swap: 9759448k total, 92k used, 9759356k free, 494868k cached
そもそも、GNOMEを起動した時点で800MBもメモリを利用しているものなのでしょうか???
メモリを沢山利用しているアプリケーションを特定し、そしてそれを制御する方法をご存知無いでしょうか。
メモリを沢山利用しているアプリケーションを、killコマンドで停止させたいのですが、それが停止して良いものかどうかもわかりません。
topコマンドで表示されるアプリケーションの一覧は、常に変動しており、どれが問題のアプリケーションなのか特定出来ません。
御教示をお願い致します。
オフライン
494868k cached って出ていますね。linuxは余ったメモリを積極的にキャッシュとして使います。余っているのは無駄ですからね。
top でメモリ使用量順にソートするには、Shift + < or > でソートするカラムを移動できます。
オフライン
kamuycikap による投稿:
私のPCはメモリを1GB搭載しているのですが、GNOME起動時にすでに800MBほど利用しています。
その800MBのうち、ほとんどはディスクから読み込んだデータのキャッシュとなります。
http://www.math.kobe-u.ac.jp/~kodama/tips-free-memory.html
等参考に、free コマンドなどで確認するのが良いです。
kamuycikap による投稿:
Mem: 1009468k total, 974512k used, 34956k free, 164100k buffers
Swap: 9759448k total, 92k used, 9759356k free, 494868k cached
例えばこの状況で、いわゆる「空きメモリ」は、free,buffers,cachedを足した分空いています。
34956+164100+494868=693924(KB) → 678MB近い空き容量があります。
この空きメモリ表示に関する件は、良く見かけるFAQなので「linux メモリ」等のキーワードで様々
調べてみると良いと思います。
・・・これだけではつまらないので参考までに、あまり実用的意味がありませんが、free を増やすコマンドを紹介します。
注意:数字を間違うと危険です! この例は物理メモリが1GB以上ある環境でのものです。また実用的意味は薄いです。 dd if=/dev/zero of=/dev/null bs=600M count=1
600MBの大きな塊を1つ、メモリに読み込んでその場ですぐ破棄しているコマンドです。
600MBの塊を読み込むという作業を明示されたOSは、buffersやcachedの分を破棄してメモリを空け、塊を読み込みます。
※一応9.04で bs にあまり大きな値を与えるとコマンドが無効となる事は確認していますが、物理メモリと同量近く、
※またはそれ以上を指定するとOSがしばらく無反応になるので注意して下さい。
これを実行後、すぐ top の free を見ると6000000 k 近い値になっていると思います。
また、この後アプリを起動したり作業をしたりすると、先程キャッシュを破棄したのでデータをHDDから読み直すため「アプリの初回起動が遅い」状況になります。
(Windowsフリーウェアでよくある「メモリクリーナー」系ソフトを実行した時のような感じ)
オフライン
大きすぎるswap領域は、実行速度の低下を招く可能性があります・・・というより、推奨されるような値(1.5倍とか2倍とか2.5倍とか)を超えるようなswapを確保したとしても、そこまで使用される状態になっているようだと実用に耐えるレスポンスではなくなっている可能性が高いです。
なので、(ハイバネートを考慮しないなら)、
・使用するアプリケーションに対して物理メモリが十分であれば、swapを確保しない。
・不足するような気がするときには、物理メモリの1.5~2.5ぐらいを確保する。
あたりがよいのかなぁ と思うところです。
# ハイバネートを考慮するなら、十分な場合でも、1~1.2倍ぐらいを確保するとか。
オフライン
To : 返事を書いていただいた皆様
返信が遅くなりました、kamuycikapです。
Ubuntuと言うよりはLinuxのメモリの使い方について、今回の件を通じて勉強してみました。
今までLinuxを利用してはおりましたが、バッファやキャッシュについては情報処理技術者試験のタイミングで勉強していたはずなのですが意味を噛み締めておりませんでした。
Linuxの場合、利用しないメインメモリの領域をキャッシュとバッファとして積極的に利用する仕様になっているとの事で納得しました。
数値としてメインメモリのほぼ全てを利用する形にはなりますが、それはキャッシュとして利用していると言うことなので、問題なかったのですね・・・・
さらに、swapについても正しい理解をしておりませんで、メインメモリが足りなくなった時に補助メモリとして利用されるくらいの感覚でいた程度です。
VineLinuxからLinuxを始めたのですが、マニュアルに「swap領域は搭載しているメインメモリの1~1.5倍くらいでOK!!」的な記述を見つけてそのままそれをルールとしていたのです。
メインメモリからアクセスされていない(アクセス頻度の低い)部分をswapに移動させる仕組みになっているとの情報を読みましたので、この点に付いても理解できました。
メインメモリが余っていても、アクセス頻度の低いメモリ領域はswap領域に移されるとの仕様で納得致しました。
素晴らしい機能だと思います。
こうして考えると、私はハイバネートを利用しないのでswap領域は得に大きく無くても大丈夫そうです。
メモリを大量に消費するようなアプリケーションも動作させることもありませんし、現状のメモリ容量と利用方法で問題ない事に気付き安心しました。
しかしながら、あまりにもswapに書き込み始めると体感スピード(動作)として遅く感じてしまうので、次の対応としてはswap領域の容量を少なく調整したいと思います。
御教示ありがとうございました。
オフライン