いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.035 / 読者数:574名

こんばんは、うすだです。

先週、首が回らなくなったことを、ここに書きました。
あれから、接骨院に通っているうちに、首が回るようになり、もとの状態に、 無事戻ることができました。

いやー、健康ってすばらしいですね!

ただ、首が回らなくなる前から、体があまりよくない状態だった、 ということがわかりました。

接骨院の先生から、「頭はつかれているけど、体はつかれていないのではないですか?」 と指摘されました。
そして、土日はだらだら過ごさず、家族と何か体を動かすことをして、 体をつかれさせた方がいいですよ、という助言をいただきました。

たしかに、土日は、昼前まで寝ていて、起きたらたまっている用事をこなすだけ、 というパターンが多いです。
ですので、ときどき、1時間くらい歩いてみることにしました。

歩いていると、今まで車で通り過ぎていたなんてことはない道が、 新鮮に感じられます。意外と、考え事をすることもできます。
そして、ほどよくつかれて、気持ちがよいです。
まだ始めたばかりですが、しばらく続けてみようと思います。

日頃、運動不足な方は、普段車や電車で行っているところを、 歩いてみるなどしてみてはいかがでしょうか。気持ちいいですよ。

というわけで、今週も、はりきってまいりましょう!

今週のお題 - メモリが足りない…とは?

先週、メモリが足りなくなったときの、その場しのぎ的刹那的対処の方法を、 ご紹介しました。

Vol.034 - メモリが足りなくなったとき
http://www.usupi.org/sysad/034.html

…しかし、それ以前に、どうなったらメモリ不足と言うのか、という点について、 なにも説明していませんでした。(すみません…)
まず、メモリ不足かどうか判断できないと、前回の小技を使う機会がないですよね。

というわけで、今週は、メモリが足りないとはどういうことか、 について考えてみたいと思います。

『いますぐ実践!』とうたっているからには、 バブルのように(?)メモリを使っていくとどうなるのか、 実際に試さないといけませんね。

はい、やってみました。
もちろん、ホンモノのサーバ上ではなく、お試し環境上で、です。

まず、簡単にメモリ不足になるよう、 実メモリとスワップの容量を小さくしておきます。
スワップは、もともとあるスワップを外し、 スワップファイルだけを用いるようにすると、小さくできます。

  # swapon -s
  Filename                  Type          Size    Used    Priority
  /dev/hda3                 partition     257032  3264    -1
  /var/cache/swap           file          32768   0       -2
  # swapoff /dev/hda3
  # swapon -s
  Filename                  Type          Size    Used    Priority
  /var/cache/swap           file          32768   0       -2

そして、以下の、ひたすらメモリを確保して、 メモリ不足に陥らせるものを起動します。

ひたすらメモリを確保するひと
http://www.usupi.org/sysad/035_takusan.txt

これは、C 言語で書かれた、fork して無駄にメモリを確保し続けるひとです。 takusan.c というファイル名で保存し、コンパイルして、実行してみましょう。

  % cc -O -o takusan takusan.c
  % ./takusan 3145728

  *** Press return key to fork.(childlen=0,len=3145728)

リターンキーを押してね、と言われますので、リターンキーを押します。
すると、子プロセスを生成し、子プロセスが、無駄にメモリを費やす何かをします。 その後、free コマンドと vmstat コマンドを実行します。

  *** free
               total     used     free   shared  buffers   cached
  Mem:         28900    27944      956        0     1136     7448
  -/+ buffers/cache:    19360     9540
  Swap:        32760        0    32760

上記が、free コマンドの実行結果です。
実メモリ(Mem)とスワップ(Swap)の、合計(total)、使用量(used)、 そして空き容量(free)などが確認できます。(ちなみに、単位は kB ですね。)

実メモリの free がいきなり少ないですが、Linux は、 極力キャッシュを残そうとしますので、buffers や cached も、 free がなくなったときには free として使われます。 だから、安心してください。
スワップも全然使われていませんので、まだメモリには余裕があります。

  *** vmstat
  procs                   memory    swap      io     system         cpu
   r  b  swpd  free  buff  cache  si  so  bi  bo   in    cs us sy wa id
   0  0     0   952  1136   7448   4   4  41  39  105    23  1  2  0 97

上記が、vmstat コマンドの実行結果です。
確認すべきところは、swap の si(swap in), so(swap out)の値です。
実メモリの空きが足りなくなって、スワップに退避させたり(swap out)、 状況が解消されてメモリに戻したり(swap in)するとき、 これらの値が増加します。
こちらも、まだたいしたことはなさそうです。

しばらくリターンキーを押していきますと、どんどん子プロセスを生成します。 子プロセスは、終了せずに動き続けますので、 だんだんとメモリが足りなくなってきます。

  *** free
               total     used     free   shared  buffers   cached
  Mem:         28900    27988      912        0      336     3004
  -/+ buffers/cache:    24648     4252
  Swap:        32760    21632    11128

  *** vmstat
  procs                   memory    swap      io     system         cpu
   r  b  swpd  free  buff  cache  si  so  bi  bo   in    cs us sy wa id
   0  0 21632   904   336   3004   4  18  40  54  105    23  1  2  0 97

スワップが、かなり使われるようになってきました。
buffers や cached も減少し、 実メモリを他の用途にとられていることがわかります。
パフォーマンスも、だんだん悪くなってきました。
こうなると、メモリの増設を考えた方がよさそうです。

さらに、リターンキーを押し続けます。すると…

  *** free
               total     used     free   shared  buffers   cached
  Mem:         28900    28072      828        0      332     3068
  -/+ buffers/cache:    24672     4228
  Swap:        32760    32760        0

  *** vmstat
  procs                   memory    swap      io     system         cpu
   r  b  swpd  free  buff  cache  si  so   bi   bo  in   cs us sy wa id
   0  0 32760   892   336   3088   4  29   41   64 106   24  1  3  0 96

スワップの空きが、なくなってしまいました。
これは、もう、ほぼ末期です。
延命のために、スワップファイルを作成して、その場しのぎ的対策を施すべきです。 一刻を争います!

…しかし、とうとう、悪名高き、OOM(Out Of Memory)キラーさんが、 動作してしまいました。

  Out of Memory: Killed process 1767 (sendmail).

Linux カーネルは、実メモリもスワップも余力がなくなると、 Linux ごと動作しなくなることを回避するため、ロシアンルーレット的に、 どれかのプロセスを強制終了しようとします。
それが、OOM キラーさんです。

誰を強制終了するかは、予測できません。(アルゴリズムは決まってます)
ですので、こうなってしまったら、強制終了されたプロセスが何であれ、 一度再起動して出直した方が、よいと思います。

以上、だらだらと説明しましたが、まとめますと、

  • 実メモリが不足し、頻繁にスワップを使う場合、パフォーマンスが低下する。 パフォーマンスを重視するなら、メモリの増設を検討する。
  • スワップの空きが減ってきたら、スワップファイルを追加して、 延命策を施した方がよい。メモリ、スワップ双方の増設を検討する。
  • OOM キラーが動作したら、一度再起動した方がよい。
    もちろん、メモリ、スワップ双方の増設を検討すべき。

と言えるのではないかと思います。

ときどき、free や vmstat を実行して、状態を見てみましょう。
そして、上記のような現象が出ていないか、チェックしてください。

ちなみに、vmstat の値は、ブート時からの平均値です。
厳密に、その時の値を知りたいなら、 インターバル(秒)を引数に指定して実行してください。
例えば、10秒毎の値を知りたい場合は、以下のように実行してください。

  % vmstat 10

宿題の答え

先週の宿題は、

  Linux 起動時に、スワップファイルが swapon されるように、設定して
  ください

でした。

これは、以下を参考に、起動用のスクリプトを作成して、 登録してやればよさそうです。

Vol.030 - サービス起動用スクリプトを作ってみる
http://www.usupi.org/sysad/030.html
Vol.031 - サービスを登録する
http://www.usupi.org/sysad/031.html

というわけで、起動用のスクリプトは、こんな感じにしてみました。

http://www.usupi.org/sysad/035_swapfile.txt

中を見るとわかりますが、スワップファイルは、 /var/cache/swap に決めうちです。
(変更したいとおっしゃる貴兄は、SWAPFILE= の後を変更してください。)

これを /etc/init.d/swapfile という名前で保存した場合、

  # chkconfig --add swapfile

と実行すれば、OS 起動時に、スワップファイルが swapon されるようになります。

今週の宿題

今週の宿題は、こちらです。

  ディスクの空き容量がなくなったときに、どういう方針で解決していけ
  ばよいか、考えてみましょう

です。

サーバの規模や用途によって、全然違ってきそうですね。
それが正しいかどうか、ということはとりあえず置いておいて、 ちょっとでもいいですので、考えてみましょう。(わたしも、考えてみます。)

あとがき

先週ちょろっとご紹介した VMware Player ですが…。
既存のゲスト OS しか動かせないはずが、早くも、 OS を新規インストールする方法が、各所で紹介されているようです。

かくいうわたくしも、自前の VMware 3.0 の環境が動作しませんでしたので、 QEMU で作成した仮想ディスクを使って、試してみました。
とりあえず、OpenBSD のインストールと起動が、できました。
Fedora や Solaris, Windows なども、ぼちぼち試してみたいと思います。

というわけで、夢にまで見た(?)、Linux 上の高速なエミュレータ環境が、 あっさりと整ってしまいました。
残る問題は、HDD とメモリに余裕がないこと、でしょうか。
メモリに関しては、速度さえ目をつぶれば、 スワップを多めにとって動かせなくもないですので、 だましだまし使っていこうと思います。

しかし、1台のマシンに複数の OS が動作している、という状態は、 実際に体験してみると面白いですよね。
経験したことのない方は、ぜひぜひ、お試しください。

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また来週、お会いしましょう!

「いますぐ実践! Linux システム管理」の解除は、以下からどうぞ。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−もう止まらない止められない。毎日描き続けます。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本