Linux memory

2,725 views

Published on

Published in: Technology

Linux memory

  1. 1. Linuxのメモリ NSEG#21 とみたまさひろ 2011-11-12Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  2. 2. 自己紹介 とみたまさひろ mailto:tommy@tmtm.org MySQLユーザ会 日本Rubyの会 id:tmtms @tmtms 1/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  3. 3. そのサーバー メモリ足りて ますか? 2/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  4. 4. IaaSを活用す るにはメモリ の知識が重要 (知らんけど) 3/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  5. 5. メモリ or メモリー? 4/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  6. 6. メモリー 5/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  7. 7. メモリ 不足!Linuxのメモリ - NSEG#21 6/26 Powered by Rabbit 1.0.4
  8. 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/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  9. 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/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  10. 10. free カーネルは空いているメモリをキャッシュと して有効活用してる キャッシュとして使用しているだけでメモリ 不足ではない 9/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  11. 11. サイズの大き いプロセスが たくさん! 10/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  12. 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/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  13. 13. メモリは共有される 親と子 実行コード /proc/*/status /proc/*/smaps 12/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  14. 14. 親と子 fork() 直後はほとんどのメモリは親子間で共 有されている 13/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  15. 15. 実行コード テキスト/データ/ヒープ/スタック 親子関係のないプロセスでも共有される 共有ライブラリも 14/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  16. 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/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  17. 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/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  18. 18. mmap() ファイルをプロセスのメモリにマッピング プロセスサイズは増える 読み込みだけならメモリを専有しない 共有してれば書き込みでも専有しない 17/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  19. 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/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  20. 20. malloc() malloc() に成功してもOSのメモリは確保さ れない プロセスサイズは増える 領域を使った時に実際にOSのメモリが確保さ れる 19/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  21. 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/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  22. 22. じゃあ使おうと した時にメモリ 足りなくなった らどうなるの? 21/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  23. 23. OOM KillerLinuxのメモリ - NSEG#21 22/26 Powered by Rabbit 1.0.4
  24. 24. OOM Killer メモリ不足時に発動する無差別殺戮者 いきなり SIGKILL で殺される 23/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  25. 25. OOM Killer 特定のプロセスが殺されないように # echo -17 > /proc/PID/oom_adj やったことないけど 24/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  26. 26. OOM Killer メモリ獲得時にエラーにしたい # sysctl -w vm.overcommit_memory=2 やったことないけど 25/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
  27. 27. まとめ メモリまわりはややこしい free を見てあわてない OOM Killer こわい 26/26Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4

×