More Related Content
More from Masahiro Tomita
More from Masahiro Tomita (20)
Linux memory
- 1. Linuxのメモリ
NSEG#21
とみたまさひろ
2011-11-12
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 2. 自己紹介
とみたまさひろ
mailto:tommy@tmtm.org
MySQLユーザ会
日本Rubyの会
id:tmtms
@tmtms
1/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 3. そのサーバー
メモリ足りて
ますか? 2/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 4. IaaSを活用す
るにはメモリ
の知識が重要 (知らんけど)
3/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 5. メモリ or
メモリー?
4/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 6. メモリー
5/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 7. メモリ
不足!
Linuxのメモリ - NSEG#21
6/26
Powered by Rabbit 1.0.4
- 8. free
4GBの実メモリで空きが239MBしかない
% free
total used free shared buffers cached
Mem: 4009264 3770072 239192 <= 0 213544 2191180
-/+ buffers/cache: 1365348 2643916
Swap: 4194300 91368 4102932
7/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 9. free
本当は2.6GB以上空いてる
% free
total used free shared buffers cached
Mem: 4009264 3770072 239192 0 213544 2191180
-/+ buffers/cache: 1365348 2643916 <=
Swap: 4194300 91368 4102932
8/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 10. free
カーネルは空いているメモリをキャッシュと
して有効活用してる
キャッシュとして使用しているだけでメモリ
不足ではない
9/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 11. サイズの大き
いプロセスが
たくさん! 10/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 12. ps
% ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
tommy 13592 0.0 2.5 104220 102812 pts/1 S 02:23 0:00 ./hoge
tommy 13593 0.0 2.5 104220 102460 pts/1 S 02:23 0:00 ./hoge
tommy 13594 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13595 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13596 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13597 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13598 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13599 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13600 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13601 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13602 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13603 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13604 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13605 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13606 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13607 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13608 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13609 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13610 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13611 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13612 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13613 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13614 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13615 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
tommy 13616 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hoge
11/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 13. メモリは共有される
親と子
実行コード
/proc/*/status
/proc/*/smaps
12/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 14. 親と子
fork() 直後はほとんどのメモリは親子間で共
有されている
13/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 15. 実行コード
テキスト/データ/ヒープ/スタック
親子関係のないプロセスでも共有される
共有ライブラリも
14/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 16. status
% cat /proc/2034/status
Name: emacs
State: S (sleeping)
...
VmPeak: 227680 kB ← 使用メモリのピーク値
VmSize: 227676 kB ← 現在の使用メモリ
VmLck: 0 kB
VmHWM: 28636 kB
VmRSS: 26428 kB ← 実メモリ使用量
VmData: 29096 kB ← データ
VmStk: 224 kB ← スタック
VmExe: 1984 kB ← テキスト
VmLib: 22288 kB ← 共有ライブラリ
VmPTE: 148 kB
VmSwap: 0 kB
...
15/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 17. smaps
共有と専有の状態が見える
% cat /proc/2034/smaps
08048000-08238000 r-xp 00000000 08:06 663152 /usr/bin/emacs23-x
Size: 1984 kB
Rss: 1512 kB
Pss: 1512 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 1512 kB
Private_Dirty: 0 kB
Referenced: 1512 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
...
16/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 18. mmap()
ファイルをプロセスのメモリにマッピング
プロセスサイズは増える
読み込みだけならメモリを専有しない
共有してれば書き込みでも専有しない
17/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 19. mmap()
total used free
-/+ buffers/cache: 1300504 2708760
Swap: 4194300 166664 4027636
VmSize: 2712 kB
VmData: 28 kB
1GB mmap() total used free
-/+ buffers/cache: 1300504 2708760
Swap: 4194300 166664 4027636
VmSize: 1051288 kB
VmData: 28 kB
読み込み後 total used free
-/+ buffers/cache: 1304564 2704700
Swap: 4194300 166664 4027636
VmSize: 1051288 kB
VmData: 28 kB
書き込み後 total used free
-/+ buffers/cache: 2348624 1660640
Swap: 4194300 184260 4010040
VmSize: 1051288 kB
VmData: 28 kB
18/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 20. malloc()
malloc() に成功してもOSのメモリは確保さ
れない
プロセスサイズは増える
領域を使った時に実際にOSのメモリが確保さ
れる
19/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 21. malloc()
total used free
-/+ buffers/cache: 1260820 2748444
Swap: 4194300 167248 4027052
VmSize: 2712 kB
VmData: 28 kB
1GB malloc() total used free
-/+ buffers/cache: 1260820 2748444
Swap: 4194300 167248 4027052
VmSize: 1051292 kB
VmData: 1048608 kB
読み込み後 total used free
-/+ buffers/cache: 1264292 2744972
Swap: 4194300 167248 4027052
VmSize: 1051292 kB
VmData: 1048608 kB
書き込み後 total used free
-/+ buffers/cache: 2285096 1724168
Swap: 4194300 165904 4028396
VmSize: 1051292 kB
VmData: 1048608 kB
20/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 22. じゃあ使おうと
した時にメモリ
足りなくなった
らどうなるの? 21/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 23. OOM
Killer
Linuxのメモリ - NSEG#21
22/26
Powered by Rabbit 1.0.4
- 24. OOM Killer
メモリ不足時に発動する無差別殺戮者
いきなり SIGKILL で殺される
23/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 25. OOM Killer
特定のプロセスが殺されないように
# echo -17 > /proc/PID/oom_adj
やったことないけど
24/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 26. OOM Killer
メモリ獲得時にエラーにしたい
# sysctl -w vm.overcommit_memory=2
やったことないけど
25/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
- 27. まとめ
メモリまわりはややこしい
free を見てあわてない
OOM Killer こわい
26/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4