トップ 差分 一覧 ソース 検索 ヘルプ 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

/proc/meminfo では見えないメモリがあるらしい。(2010/01/31)

/proc/meminfo の解説も詳しい

SystemTapで真犯人を捕まえろ!(1/4) − @IT

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/

memo(2009/07/23)

Linuxサーバ運用マニュアル
http://ash.jp/linux/unyo/06.htm

man ps より

:
-n  namelist    名前リストファイルを指定する。 N と等しい。
               WCHAN の表示を正しく行うには、 名前リストファイルが必要である。正しい出力のためには、名前リストファイルは現
               在の Linux カーネルに正確に一致するものでなければならない。このオプションを指定しない場合、名前リストのデフ
               ォルトの検索パスは以下の通り:

                    $PS_SYSMAP
                    $PS_SYSTEM_MAP
                    /proc/*/wchan
                    /boot/System.map-`uname -r`
                    /boot/System.map
                    /lib/modules/`uname -r`/System.map
                    /usr/src/linux/System.map
                    /System.map
:
wchan      WCHAN    プロセスがスリープしているカーネル関数の名前。プロセスが実行中の場合は "-" である。プロセスがマルチスレ
                   ッドで、かつ ps がスレッドを表示していない場合は、"*" である。
:
# tail /boot/System.map-`uname -r`
c041f144 b unix_nr_socks
c041f148 b __key.31165
c041f160 b unix_socket_table
c041f564 B unix_tot_inflight
c041f568 b unix_gc_lock
c041f56c b gc_in_progress
c041f570 b wireless_nlevent_queue
c041f580 B __bss_stop
c041f580 B _end
c0420000 B pg0
# tail /proc/kallsyms
7e93b82b a __crc_thermal_cooling_device_unregister      [thermal_sys]
c02b88db u mutex_unlock [thermal_sys]
45954bc5 a __crc_thermal_zone_unbind_cooling_device     [thermal_sys]
c0247968 u hwmon_device_unregister      [thermal_sys]
c0356160 u malloc_sizes [thermal_sys]
f881254b T thermal_cooling_device_unregister    [thermal_sys]
c01e1b72 u strlen       [thermal_sys]
68dd28e5 a __crc_thermal_cooling_device_register        [thermal_sys]
c023b0be u class_register       [thermal_sys]
c02390a1 u device_remove_file   [thermal_sys]
# cat /proc/*/wchan

memo(2010/01/31)

以下説明分かりやすそう。

減り続けるメモリ残量! 果たしてその原因は!?(1/3) − @IT

高負荷なのに片方のサーバにだけ余裕が……なぜ?(1/4)

memo(2014/04/10)

/proc/meminfoを考える - めもめも
http://d.hatena.ne.jp/enakai00/20110906/1315315488

2014/04/16 各プロセス毎のswap量(kbyte)を表示

各プロセスのスワップ使用量を調べる。 なお、root or sudo での実行が必要。 参照元: http://northernmost.org/blog/find-out-what-is-using-your-swap/
https://gist.github.com/koemu/8015682

最終更新時間:2014年04月16日 22時05分13秒