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
- ディスク
- sar
- vmstat 1
- blktrace
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秒