SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|

2006-02-06(Mon) ディスクキャッシュで腹イッペイ

  そうそう、Linuxのサポートを仕事にしていると、当然ながらOSの挙動について詳しくなる。システムのトラブルを解決するには、大量のシステム統計情報をガリガリと読みこなし、原因を推定し、診断を下さねばならないからだ。だから、最近はLinuxのメモリ利用状況は、ログを読むだけで手に取るようにわかる。

  いきなり昔話になるが、太古のOS(MS-DOSなど)には、ディスクキャッシュという機能があった。搭載されているメモリの一部に、フロッピーディスクやハードディスクから読み込んだ部分を貯蔵して(残して)おいて、再度必要になったときに、ディスクから読まずに、メモリから取り出すことで高速化する機能である。キャッシュに利用されるメモリ量はキャッシュ機能をオンにする時に設定によって決まる。キャッシュ用のメモリ量が多いほど快適になるが、その分メインメモリが減るので、設定には熟慮を要した。

  しかし、近年のOSにはディスクキャッシュの設定は存在しない。だが、別にディスクキャッシュという機能がなくなったわけではない。搭載メモリの遊んでいる部分は、すべてディスクキャッシュに利用してしまおうという方針になっているのである。確かに余っているメモリを有効活用するという意味で、ディスクキャッシュはうってつけである。

  だから、システム起動時はともかくとして、システムが稼動するにつれて、空きメモリにはどんどんディスクの内容が充填されていく。この段階では、キャッシュした内容が再度使われるかどうかの判断なんて行われない。なにしろ、カタッパシから読んだディスクの内容を空きメモリに充填していくのである。これは、設定にもよるが、搭載メモリの90%以上が利用された状態になる程度まで進行する。つまり、真に空いているメモリが10%以下になってしまうまで続くのである。

  この状況は、freeコマンドで確認できる。

[mitsu@colinux mitsu]$ free
             total       used       free     shared    buffers     cached
Mem:         61416      60000       1416          0       3516      38636
-/+ buffers/cache:      17848      43568
Swap:        65528          0      65528

  上記は、coLinuxを64MBで起動して、しばらくの後の状況である。搭載メモリが61416KB、利用メモリが60000KB、空きメモリが1416KB。実にメモリ使用率97.7%である。で、どれくらいキャッシュに利用されているかというと、buffersとcachedの合計値がそれだ。42152KB。これは68.6%である。実に搭載メモリの7割近くは、ディスクキャッシュに利用されているのである。

  で、大変に質問に多いのがこの状況についてである……「たいへんです!! ウチのサーバ、ほとんど空きメモリが残ってないんです!!」……という質問である。結論から言うと、思いっきり大丈夫である。何の心配もない。ディスクキャッシュの内容なんてのは「別になくても構わない」内容であるから(だって、同じデータがディスク上にあるのだ)、別途必要になった時には即座に開放することができるからである(例外はあるが)。

  この状況では「-/+ buffers/cache」の行に注目しなくてはいけない。usedの欄はかなり少なく、freeの欄はかなり多い。これは、キャッシュに利用しているメモリ容量を、空きメモリであるとして計上した場合の容量である(実際にbuffersとcachedの数値を加減してみてほしい)。つまり「実質の空きメモリ」はこの行で確認できるようになっているのである。それを加味すると、メモリ使用率は29%。まだまだ余裕であることがわかる……

  ……と、このようにLinux環境においては、サクっとメモリについて語れるオイラであるが、Windowsはわからない。統計情報をどこで見たらいいのかさえわからない。え? やっぱそう? タスクマネージャ? そーなのか……やっぱり、テキスト至上主義のUNIXの方がどう考えても正しい姿だよな。ホントにこんな情報しかないの? でも、項目の意味すらわからないんだよねぇ。ググる……

  ……概ねわかった。タスクマネージャの「物理メモリ」と「コミットチャージ」が重要な情報らしい。まずは「物理メモリ」の「合計」だが、これは実際の搭載メモリを現している。搭載メモリが512MBなら、約512000を表示しているはずだ。

  画像の説明

  で、重要なのが「コミットチャージ」の「合計」だ。これはシステムが利用しているメモリ容量だ。400000とか表示されていたら、400MB利用しているという意味。なに? ウチは512MBしか搭載してないのに、800MB以上使っているコトになってるって? 大丈夫。別におかしくない。ざっと言うと、足りない部分はハードディスクをメモリ代わりに利用しているからだ。それが仮想メモリ。ただし、ハードディスクをメモリ代わりに使う場合は、必要なときにメモリに呼び戻さなければならないので、遅くなる。これがPhotoshopのウィンドウに切り替えるときにモッサリする理由だ。

  結局、どうすればいいのか? それは「コミットチャージ」の「最大値」を見ればいい。自分が普段使うように……できればちょっと贅沢めにアプリをたくさん立ち上げて、ウィンドウを開きまくって「最大値」を見るのだ。それが望ましいメモリ搭載量である。理論的には、その値が「物理メモリ」の「合計」を上回らない限り、仮想メモリは利用されないはずである。つまり、それでもモッサリを感じるとしたら、それはメモリのせいでなく、CPUの処理能力のせいであるということだ。

  ちなみに「コミットチャージ」の「制限値」は「物理メモリ」の「合計」と仮想メモリの容量を足した数値だ。どうがんばっても、これを超えてメモリを利用することはできないという限界量だが、限界量付近ではかなりレスポンスが悪化するハズなので、ここまで大丈夫であるとは思わないほうがいいだろう。

  あ、オマケに注意しておくと、下のグラフは「ページファイル使用量の履歴」とあるが「ファイル」だからといって、ハードディスクを利用している、つまり、仮想メモリの使用量を示しているわけではない。この値は「コミットチャージ」の「合計」と同じであり、その推移である。あー、まぎらわしい。

  ちゅーわけで、昨日注文したメモリを装着すると、物理メモリがイッキに3倍。仮想メモリは一切使用されなくなるわけで……うーん、楽しみじゃ!!

  画像の説明

  あ、そうそう。結局、職場の同僚に頼んで「巻き取り延長コード」を買ってきてしまってもらった。こっちはなかなかに高級感が漂う作りで、巻き取りもスムーズだ。そりゃ、パッケージの女の子もニコニコなワケである。ちなみに、この娘は目の下がぷっくりしていて、非常にかわいらしい。どうも、オイラは目の下フェチらしい。残念なことに歯グキがちょっと出ているのが減点であるが……って、ナニ書いているんだオレは!! ……と、さりげなく自分の好みをひけらかしつつ、ハヨ届けメモリ。