Your SlideShare is downloading. ×
Linux memory
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Linux memory

1,977
views

Published on

Published in: Technology

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,977
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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