
Ubuntu日本語フォーラム

ログインしていません。
Ubuntu 7.10を1GBのメモリを搭載したノートで使用しています。
ログイン直後にfreeやシステムモニタで確認すると、わずか(29.8MB)ですがswapが使用されています。
メモリはfirefoxを起動している状態で382MB(38%)使用していて、600MB以上余っていますが、なぜスワップが使用されてしまうのか不明です。
オフライン
500MBのメモリ/1GBのスワップですが、現在の使用量はメモリ281.2MB/スワップ33.9MBのようです。
起動時のあっぷあっぷな状態でスワップに退避されたけど、その後は特に必要となっていない(けれどいずれ必要になるかもしれない)ものがそのまま残っているとか、スワップ領域を使うための情報が保持されているとかそういうことなんじゃないでしょうか。はっきりした実害が発生していないのなら、「そういうもの」と考えておけばいいと思います。
オフライン
このフォーラムの別の投稿( http://forum.ubuntulinux.jp/viewtopic.php?id=1145 )からリンクされている developerWorks の記事では Ubuntu 6.10 ベースで swap が使用されないようにメモリ消費量を抑える tips が紹介されていたのですが、その筆者の環境では swap はメモリが足りなくなったときに使用され、そうでない場合は 0 という状態でした。
実害は確かにないんですが、Ubuntu を使い続けていこうと決心し、こうした問題も少しずつ解決していきたいと考えているため「これこれこういう理由」というものを知りたいです。
ちなみに上記で挙げた別の投稿の投稿者も、swap は私や Shibata-san と同程度使用されているようです。
オフライン
たとえ小さめのアプリケーションでも, それらをいくつか同時に走らせたりするとそれなりにメモリーを消費するです。
ログイン直後に swapの usedの項目が 0じゃないのなら, 起動からログインまでの間にいろんなものが走ったのカモです。
起動時に fsckが走ったとか色々 …
一度 usedの項目を 0にして しばらく様子を見てみるのはどーでしょー。
とりあえず (もしかすると他にそんなコマンドがあったカモだけど) 一度 swapoffにして も一度 swaponにすると 0にできるです。
オフライン
>satosystemsさま
理由については、自分の知識では答えられそうにありません。すみません。
bootchartのような起動時のプロセスのログを取るようなものを使えば、
どのタイミングでスワップが発生しているか確認することができるかもしれませんね。
ちなみに、1GBのメモリ/2.5GBのスワップのマシンで調べて見たところ、
ですが、現在の使用量はメモリ288.1MB/スワップ0Bのようです。
前述のマシンとインストール状況や起動しているアプリケーションはほとんど変わりません。
唯一、そしておそらく最大の違いは、スワップが発生してないマシンではCompizをオフにしています。
オフライン
satosystems による投稿:
このフォーラムの別の投稿( http://forum.ubuntulinux.jp/viewtopic.php?id=1145 )からリンクされている developerWorks の記事では Ubuntu 6.10 ベースで swap が使用されないようにメモリ消費量を抑える tips が紹介されていたのですが、その筆者の環境では swap はメモリが足りなくなったときに使用され、そうでない場合は 0 という状態でした。
実害は確かにないんですが、Ubuntu を使い続けていこうと決心し、こうした問題も少しずつ解決していきたいと考えているため「これこれこういう理由」というものを知りたいです。
ちなみに上記で挙げた別の投稿の投稿者も、swap は私や Shibata-san と同程度使用されているようです。
Linuxのswapは(というか最近のOSのswapは)、メモリが足りなくなってから使い
始めるものではありません。
多くのOSでは、物理メモリを、
・プログラムの動作領域
・(HDDなどの低速デバイスの)キャッシュ
の二通りの使い方をします。特に後者は性能に大きく貢献するため、可能な限り
キャッシュを維持する、というのがデフォルト設定です。
メモリは有限ですから、不足を補うためにswapを使うか、あるいはキャッシュ領域を
早めにパージしてしまうことで節約する、というのが普通の使い方です。が、
ここで問題になるのは、ヒット率の高いキャッシュ領域をページアウトさせるより、
ヒット率の低いプロセスをswapさせた方が効率が良くなる可能性が高いことです。
(つまり、使わないプロセスよりもキャッシュ領域を実メモリ上に残した方が
全体的なパフォーマンスは上がる)
そこで、あらかじめ使わないプロセスはswap outさせておき、実メモリをより
広く使えるようにする、という実装が出てきます。Linuxでは2.4カーネル以降で
このような動作になっています。
認識としては、「足りなくならないように、ヒマがあれば使わないプロセスを
swapへ追い出す」だと思っておくと分かりやすいと思います。
当然「ヒマがあれば」なので、swap outのコストが性能に影響しないように
工夫されているので、パフォーマンスクリティカルな用途でなければ気にしなくても
問題ありません(常時一定のパフォーマンスを発揮してくれないと困る、という
用途ではこれが裏目に出ることがある)。また、常にbusyにしておくとswap out
しているヒマがなくなるので、先読みswapはされなくなることもあります。
オフライン
その後、時間があるときに少しずつ swap について調べてみました。
swap でもっとも皆が知りたいと思っているのは、
どれぐらい領域を確保すればよいのか、ということのようでした。
「実メモリの二倍」というのが数年前の定説だったようですが
それはメモリが 128MB とかの時代は、ということらしく
最近のトレンドとしては、swap outしないだけの実メモリを搭載する、
あるいはswap outしないように使う、となっているそうです。
ただし、アプリケーションによっては(それが何かはわかりませんでしたが)
積極的に swap out させる(私はよく意味がわからなかったんですが)
ものもあるらしく、スワップ領域は 256MB ぐらいは確保したほうが良い
という意見もありました。
実メモリが十分大きいなら、スワップ領域はそんなに必要ない、
というのが私の理解です。
オフライン
素朴な疑問なのですが、実メモリが大きく swap が小さいと、ハイバネーションする場合に困ったりしないでしょうか?
オフライン
肝心の swap out については、あまり調べ切れませんでした。
ただ、swap が使用されているからといって、メモリが足りない
というわけではない、という趣旨の言及がされているサイトを
見かけました。
残念ながらそれ以上の詳しい説明はなかったのですが。
メモリ-は十分なはずなのに SWAP を使ってる?
http://www.math.kobe-u.ac.jp/~kodama/tips-free-memory.html#memory_swap
Linux Kernel については、まったく勉強したことがないのですが、
Linux Kernel を勉強すると何が面白いのか、ということがわかれば
興味がわいて勉強するかもしれず、そのときにもし何かわかれば
またフォローしたいと思います。
Shibata-san, RxOrca-san, hito-san, お付き合いありがとうございました。
オフライン
mizuno-san, こんばんは。
mizuno による投稿:
素朴な疑問なのですが、実メモリが大きく swap が小さいと、ハイバネーションする場合に困ったりしないでしょうか?
そういわれればそうですね。
想像ですが、スワップしまくりで、実メモリを収める分だけ
スワップ領域が残っていない状態で、ハイバネーションできるのであれば
スワップがなくても問題ないかもしれないですね。
オフライン
「Linuxの教科書」からの抜粋です(お薦めできる本です)。
メモリに7.6MBの空きがあるのに6MBのスワップ領域が利用されている。これは、ほとんど利用されていないプロセスなどを、カーネルがディスク上のスワップ領域に追い出しているからだ。これによりカーネルは、より大きなバッファをメモリ中に確保し、結果的にパフォーマンスを高めているのだ。
「Beginning Ubuntu Server Administration From Novice to Professional」にはサーバであれば1GBで十分だと書かれていましたけれど、デスクトップはどうなんでしょうね。
オフライン
参考情報ですが、pad さんが紹介されているメモリ管理の仕組みは、UNIX、MS-Windows でも採用されています。他の OS は仕事で使ったことがないのでわかりません。