トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Linux、負荷まわりの話

[カテゴリ:Linux]

メモリ(2007/10/03)

ページキャッシュ(/proc/meminfo:Buffers + Cached)

  • 外部記憶装置のデータをページ単位でメモリ上に保存するしくみ。
  • 空きメモリは積極的にページキャッシュとして使用される。(空きメモリが少ないからといって、メモリが足りないとは言い切れない)
  • バッファキャッシュを含む。
  • read
    • ページキャッシュから読み込む。
    • ページキャッシュ上に存在しないとき、外部記憶装置から読み込む。
  • write
    • ページキャッシュ上に書き込む。
    • 書き込まれたページはDirtyなページ(=外部記憶と同期していないページ)となる。
    • Dirtyなページは後でまとめて外部記憶に書き込む。

ページキャッシュ経由でデータがやり取りされる。

+------------------------------------------+
| ファイルシステム、mmap、スワップ処理など |
+------------------------------------------+
         read↑          ↓write
+------------------------------------------+
|  ページキャッシュ (Buffers + Cached)     |
+------------------------------------------+
         read↑          ↓write
+------------------------------------------+
|        外部記憶装置(HDDなど)           |
+------------------------------------------+

ページキャッシュは使用頻度によって、次の遷移を行う。

空きメモリー
  ↓
Inactive(使用頻度が低いページ)
  ↓
Active(使用頻度が高いページ)

使用頻度が低いページは、ページ回収によって
空きメモリーに戻る。

スラブ(/proc/meminfo:Slab)

カーネル内部で確保するメモリ資源のこと。

ページテーブル(/proc/meminfo:PageTables)

仮想アドレス上のページと、物理アドレス上のページの
結びつきを管理するテーブル。

メモリ使用状況を見る。

free

$ free
             total       used       free     shared    buffers     cached
Mem:       1036120    1015500      20620          0      74652     745424
-/+ buffers/cache:     195424     840696
Swap:      2650684         44    2650640
用途サイズ
物理メモリ容量1036120
なんら使われていない純粋な空きメモリ20620
ページキャッシュは全て回収したときの空きメモリ20620+74652+745424=840696

/proc/meminfo

$ cat /proc/meminfo
MemTotal:      1036120 kB 搭載されているメモリ総量(物理メモリ総量)
MemFree:         37576 kB 空きメモリサイズ
Buffers:         74460 kB バッファキャッシュのサイズ(ブロックデバイス用キャッシュ)
Cached:         734176 kB ページキャッシュからバッファキャッシュを除いたサイズ(ファイル用キャッシュ)
SwapCached:          4 kB pageinしたばかりのサイズ(メモリ不足時にpageoutせずに開放可能)
Active:         330868 kB 最近アクセスされたページの合計サイズ(開放優先度低い)
Inactive:       630508 kB 最近アクセスのないページの合計サイズ(開放優先度高い)
HighTotal:      130512 kB
HighFree:          244 kB
LowTotal:       905608 kB
LowFree:         37332 kB
SwapTotal:     2650684 kB
SwapFree:      2650640 kB
Dirty:            1640 kB ディスクへ書き込みが必要なページの合計サイズ
Writeback:           0 kB ディスクへ書き込み中のページの合計サイズ
AnonPages:      152692 kB
Mapped:          20720 kB
Slab:            27056 kB slabとして使用しているメモリ量
PageTables:       1240 kB pagetableとして使用しているメモリ量
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   3168744 kB
Committed_AS:   333592 kB
VmallocTotal:   114680 kB vmalloc()している総量(確保予定含む)
VmallocUsed:      5012 kB vmalloc()で実際に使用しているメモリ量(確保済みのみ)
VmallocChunk:   109388 kB
ユーザアプリ使用メモリサイズ=
MemTotal
-MemFree
-Buffers
-Cached
-SwapCached
-Slab
-PageTables
-VmallocUsed

Linux各種状況を参照するコマンド(2007/10/03)

  • スラブ
    • cat /proc/slabinfo
    • /usr/bin/slabtop
  • メモリ
    • free
    • vmstat 1
  • CPU,プロセス
    • ps
    • top
    • mpstat 1

memo(2007/10/03)

tmpfs:スワップあり
ramfs:スワップなし

TASK: VMSTATで得られる値IOWAITの出身を探索せよ
http://www.netfort.gr.jp/~dancer/column/data/20050326-vmstat.pdf

naoyaのはてなダイアリー - Linux のページキャッシュ:
http://d.hatena.ne.jp/naoya/20070521/1179754203

proc/meminfo - Linuxカーネルメモ:
http://wiki.bit-hive.com/linuxkernelmemo/pg/proc%2Fmeminfo

JF: Linux Kernel 2.6 Documentation: tmpfs.txt:
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6/filesystems/tmpfs.txt.html

http://www.miraclelinux.com/technet/document/linux/training/2_5_4.html

http://www.math.kobe-u.ac.jp/~kodama/tips-free-memory.html

ページキャッシュ:
http://opentechpress.jp/kernel/internal24/node74.shtml

バッファキャッシュ:
http://opentechpress.jp/kernel/internal24/node58.shtml

スピンロックから始めるLinuxカーネル入門 - LinuxKernelHackJapan:
http://hira.main.jp/wiki/pukiwiki.php?%A5%B9%A5%D4%A5%F3%A5%ED%A5%C3%A5%AF%A4%AB%A4%E9%BB%CF%A4%E1%A4%EBLinux%A5%AB%A1%BC%A5%CD%A5%EB%C6%FE%CC%E7

memo(2007/10/15)

Yukiharu YABUKI の tDiary(2007-01-20):
http://www.netfort.gr.jp/~yabuki/diary/20070120.html

echo 1 > /proc/sys/vm/block_dump でディスクの書き出しをリンク先のようにカーネルログに残す。
LD_PRELOAD=/lib/libmemusage.so ls > /dev/null 占有メモリをリンク先のように標準エラー出力に出す
(http://etbe.blogspot.com/2007/01/some-random-linux-tips.html)

[ThinkIT] 第5回:カーネルをチューニングする (1/4):
# /proc/sys/ の項目紹介
http://www.thinkit.co.jp/free/tech/23/5/

最終更新時間:2007年10月15日 00時32分22秒