• ベストアンサー

メモリが足りているのにSWAPが発生

Linuxにおいて、メモリが十分足りているのにSWAPが発生することがあるようなことを聞いたことがあるのですが、どのような場合でしょうか?教えて下さい。よろしくお願いします。

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

  • ベストアンサー
  • nolix
  • ベストアンサー率19% (110/572)
回答No.1

どういう理由でメモリが十分だと認識できるのか例で説明します。 例1)ファイルサーバー samba3.0系 XEON 3GHz HDD:1TB RAID1 メモリ:4G OS:Cent OS 3.8 上記サーバーは、ファイルサーバー用途です。4台の端末から、同時に動画ファイル4Gを書込みしてみます。 検証は、topというコマンドを使います。 top 【enter】 実メモリ4G搭載していても、4Gのファイル4本を同時に書込みにいくとLinuxはHDDへの遅延書込を行うために、実メモリをどんどん消費します。数分もすると、実メモリは100%消費されます。 その時のCPU使用率はたいしたことありません。5%程度です。 例2)webサーバー apache2.0系 pentium4Noothwood 3GHz HDD:250GB RAID1 メモリ:2G OS:Cent OS 3.5 上記、webサーバーは不動産系の地図を多く使うサーバーです。 こちらもアクセス数によっては、実メモリを100%利用しています。 こちらは、メモリの増設ができないのでapacheをチューニングしなければなりませんでした。 つまり、実メモリが十分だという根拠を証明することは非常に難しいです。Linuxはフレキシブルにメモリを消費しますので、例1)の様なファイルサーバーは昨今の最大ファイルサイズが大きい事を考慮すると8GB搭載しても良いと思います。 1000人クラスのsmtpサーバーでもpopのセッションを100程度にすると2Gでなんとかまかなえますが、コンソールは非常に重いです。やはり4G程度搭載した方が無難な様な気がします。 通常のショッピング系サーバーであれば、同時アクセス数20前後、PHP4+postgres8+qmail+ezmlm+mysql+apache1などの構成で、Pentuim4なら2G程度で十分です。 つまり用途によって実メモリの消費は大きく左右され、フレキシブルに実メモリを消費しますので、十分なメモリの容量は運用してみないと分かりません。 ですのでswap領域を実メモリの50%~200%の間で設定される方が安心です。 上記の様な点でWindowsとは全く違う動きをします。Windowsのメモリの消費を見ていますと、それ程有効に消費しているようには見えませんが これは、これで良い点もあるようです。 256MBのメモリで1000人のメールサーバーが稼働するSolarisを選ぶのかLinux、FreeBSDにするのか、WindowsServerなのか、まあ予算と好みの問題ですかね。 結論:swapは不要なほど実メモリを搭載しても、不安要素がのこるなら、swapを設定しておいた方が安心だ。ということです。 メモリが十分だという根拠は、運用してみないと分からない。 最初に導入する時点で、swapは実メモリの50~200%設定しておいた方が無難である。

その他の回答 (3)

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.4

仮想記憶という40年前の技術を知らない人の質問ですね。 仮想記憶でググッてみると、いろいろと解説があるみたいだから、そこで勉強したらどうでしょう。 初級シスアド 苦手克服シリーズ(6) http://allabout.co.jp/study/itqualification/closeup/CU20060917A/ というのが、良いかもしれません。 しかし、40年前の技術を勉強して使う仕事って、給料もらえるのかな?

noname#208124
noname#208124
回答No.3

大抵は動作の不理解 ページキャッシュの見方を知らないか、投機書き出しを知らない

参考URL:
http://www.atmarkit.co.jp/flinux/rensai/tantei01/bangai01a.html,http://d.hatena.ne.jp/NyaRuRu/20071010/p1
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

#1の方が書かれていますが、何を以て「メモリが十分足りている」と判断するかは難しいです。 「スワップパーティション無しで使用していてもメモリ不足のエラーにならないのに、スワップパーティションありにすると同じ事をしてもスワップが発生する」 というのはあり得ます。OSは実装されたメモリとスワップエリアの量を見てバッファやキャッシュの量を調整するので。 ファイルIOが大量に発生していて、一方、ずーっと長い間全くアクセスされていないメモリ領域があるとそれはページアウトされて、そのエリアをバッファに使うと思います。このときスワップエリアがなければ、ページアウトできないので、小さいバッファでIOすることになります。

関連するQ&A

  • Linux での swap の容量について

    昔から UNIX では swap の容量はメモリの2倍や3倍がよいと言われていたようですが、 Linux ではそんなことはなく、メモリが多ければ swap なしでも問題なく動くとつい先ほどまで信じていたんですが、「Linux教科書 LIPCレベル1 (ISBN4-7981-0292-X)」という本を買って、swap に関する説明を見たら「スワップ領域は塔載メモリと同程度を確保します。」と書いてありました。 これは一体どういうことでしょうか? 本当に Linux は swap の容量を塔載メモリと同じ程度にしなければいけないんですか? だとするとその根拠はなんでしょうか? p.s. 根拠がなくても資格試験でそういう問題が出て塔載メモリと同じ程度と答えないと点がもらえないというのならそう答えますが、非常に気になります。

  • LinuxのSwap領域は、なぜ実メモリと同等か2倍程度?

    「LinuxのSwap領域は、実メモリと同等か2倍程度」 取りましょう、とよく目にするのですが、 根拠を教えてください。 多ければよいと言う訳でもなさそうだし、 疑問に思っています。 よろしくお願いします。

  • OSインストール時のWidowsのSwap領域って?(メモリ増設)

    Linuxをインストールする時には搭載メモリの2倍くらいのSwap領域をインストール時に作ったり、あるいは自動インストールでは勝手にSwap領域が作られるのだと思いますが、例えばWindowsXPも同じことをやっているのですか? というのも、WindowsXPをクリーンインストールしようと思うのですが、メモリが少ないので増設するためのメモリをヤフオクで探し中です。でも、早く今ある状態でXPをインストールして使いたいわけで・・・。 仮にLinuxと同じであれば、メモリ128MBを搭載してWindowsXPをインストールすれば256MBのSwap領域が作られてしまって、後からメモリを増設して256MBにした場合、Swap領域が足りなくなる気がするのです。256MBにしてからインストールすれば512MBのSwap領域が作られそうなので。 そもそも128MBのメモリ搭載でWindowsXPをインストールする時と256MBのメモリ搭載でWindowsXPをインストールする時で、Windowsの設定とかに違いは出るのでしょうか。勝手にいろいろ設定されるからよくわかりません。 こんなことを考えている最近です。ご存知の方、教えてください!

  • swapって?

    Linuxをインストールする途中に、swap領域を設定っていうところがあったのですが、swapとはどういう役目をしているのでしょうか? あと、OpenOfficeをインストールしたのですが、日本語がすべて化けて表示されています・・・。インストールの最初の画面から化けてましたが、ちゃんとインストールする方法はありますでしょうか? もしなければアンインストールしようと思うのですが、僕が持っているLinuxの本では、アンインストールの行い方は一切書かれていません・・・。 それか単純にディレクトリをrmで消せばよいのでしょうか? 宜しくお願いします。

  • freeコマンドのfree,swapについて

    Linuxカーネル本では、回収アルゴリズムはメモリが少なくなったら動作すると記載がありますが、 24時間運転のJavaアプリが動作している環境で、freeコマンドfree容量、swap容量は 毎日増え続けています。 1.freeコマンドのfree容量、swap容量の開放タイミングはいつかを教えてください。 2.24時間運転のような、再起動のタイミングが無い場合、freeコマンドのfree,swapはどういう場合、   回収動作が実行されるか、free,swapの値は増え続けて問題は無いでしょうか。 3.メモリはどんどん使っていって、少なくなったら回収する時の閾値設定は何になるのでしょうか?  例:/proc/~ の・・・の値を超えた場合、swapの回収を行う。 よろしくお願いいたします。

  • windows から linux の swap を認識してしまう

    windows 2000 と Vine Linux 2.6r1 を デュアルしてます. パーティションを 基本:windows 2000 基本:Linux /boot 基本:Linux / 拡張:論理:windows data    論理:Linux swap としました. swap の認識を外すにはどうすればよいでしょう? 教えてください.

  • swapパーティションの設定

    VineLinuxでswapはどのパーティションが自動選択されることになっていますか? 以前は/dev/hda4がswapとして自動でマウントされていました。 それは/etc/fstabに /dev/hda4 swap ... と記述があったからだと思っています。 /homeなどはラベルを使って/etc/fstabに定義してあるのでswapもラベルで定義しようとしました。 /swap swap ... これで、HDDをセカンダリに接続してもそのままでswapが自動でマウントされると思ったのですが、swapのパーティションとして/dev/hda4を探して、見つからなくてswap無しでLinuxが起動しました。 /dev/hda4という情報はどこから出てきたのでしょうか?

  • LinuxのSWAP領域の移動?

    お願いします。 既存のSWAP領域を削除して、新規に別のパーティションにSWAP領域を作成したいです。 SWAP領域を作る事自体は、何となく分かるのですが、そのSWAP領域作成後に 何か設定しないといけないと思うのですが、何をすればいいのでしょうか? /etc/fstab を見ると、SWAP領域の部分が下記のようになってます。 (Linuxは2つ入ってます。質問上、2つの内容を書きます。) RHELv4 x86    LABEL=SWAP-sda7    SWAP    SWAP   defaults  0   0 RHELv4 EM64T    /dev/sda7    SWAP    SWAP   defaults   0   0 sda7が現在のSWAP領域です。 ここでまずは、この設定ですが、例えば新規のSWAPをsda9に作った場合、 単純に sda7 の部分を、sda9 に書き換えるだけでいいのでしょうか? また、2つを比べると、一部記載内容に違いがあるのですが、そこは何故違うのでしょうか? 通常、普通のパーティションの追加の場合、(例えば新規に「/var」を追加など) e2label?コマンドで、ラベルを書き込んだりしたような記憶があるのですが、 SWAPの場合はそういう作業は無いのでしょうか? 以上、長々となってしまいましたが、よろしくお願いします。

  • Linux の swap についての疑問

    Linux でプロセスごとの swap 使用量を調べようとして /proc/PID/smaps での Swap: の合計や /proc/PID/status の VmSwap: を抜き出しているのですが、 root で全プロセスの swap 使用量を抜き出して合計した容量と free コマンドで出てくる Swap: の使用量が一致しません。これは何故でしょうか? free で出てくる方の swap 使用量が多いです。通常のプロセス以外の何かが swap を使用しているということでしょうか? とするとそれは何ですか? また何であるかを調べる方法がありますか?

  • swap領域の変更について

    こんにちわ。 今、Miracle Linux をマシンにインストールしたのですが、SWAP領域の設定をしないでインストールしてしまいました。 インストール後に、SWAP領域の変更を行う方法がよくわかりません。 どなたかご存知の方がいらっしゃいましたら、ご教授ください。よろしくお願いします。