Download - Linux memory
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
LinuxのメモリNSEG#21
とみたまさひろ2011-11-12
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
自己紹介
とみたまさひろ
mailto:[email protected]
MySQLユーザ会
日本Rubyの会
id:tmtms
@tmtms
1/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
そのサーバーメモリ足りて
ますか?2/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
IaaSを活用するにはメモリの知識が重要
(知らんけど)
3/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
メモリ or メモリー?
4/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
メモリー
5/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
メモリ不足!
6/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
free
4GBの実メモリで空きが239MBしかない
% free total used free shared buffers cachedMem: 4009264 3770072 239192 <= 0 213544 2191180-/+ buffers/cache: 1365348 2643916Swap: 4194300 91368 4102932
7/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
free
本当は2.6GB以上空いてる
% free total used free shared buffers cachedMem: 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
free
カーネルは空いているメモリをキャッシュとして有効活用してる
キャッシュとして使用しているだけでメモリ不足ではない
9/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
サイズの大きいプロセスがたくさん!
10/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
ps
% ps uUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDtommy 13592 0.0 2.5 104220 102812 pts/1 S 02:23 0:00 ./hogetommy 13593 0.0 2.5 104220 102460 pts/1 S 02:23 0:00 ./hogetommy 13594 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13595 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13596 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13597 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13598 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13599 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13600 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13601 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13602 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13603 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13604 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13605 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13606 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13607 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13608 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13609 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13610 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13611 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13612 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13613 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13614 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 13615 0.0 2.5 104220 102464 pts/1 S 02:23 0:00 ./hogetommy 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
メモリは共有される
親と子
実行コード
/proc/*/status
/proc/*/smaps
12/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
親と子
fork() 直後はほとんどのメモリは親子間で共有されている
13/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
実行コード
テキスト/データ/ヒープ/スタック
親子関係のないプロセスでも共有される
共有ライブラリも
14/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
status
% cat /proc/2034/statusName: emacsState: S (sleeping)...VmPeak: 227680 kB ← 使用メモリのピーク値VmSize: 227676 kB ← 現在の使用メモリVmLck: 0 kBVmHWM: 28636 kBVmRSS: 26428 kB ← 実メモリ使用量VmData: 29096 kB ← データVmStk: 224 kB ← スタックVmExe: 1984 kB ← テキストVmLib: 22288 kB ← 共有ライブラリVmPTE: 148 kBVmSwap: 0 kB...
15/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
smaps
共有と専有の状態が見える
% cat /proc/2034/smaps08048000-08238000 r-xp 00000000 08:06 663152 /usr/bin/emacs23-xSize: 1984 kBRss: 1512 kBPss: 1512 kBShared_Clean: 0 kBShared_Dirty: 0 kBPrivate_Clean: 1512 kBPrivate_Dirty: 0 kBReferenced: 1512 kBAnonymous: 0 kBAnonHugePages: 0 kBSwap: 0 kB...
16/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
mmap()
ファイルをプロセスのメモリにマッピング
プロセスサイズは増える
読み込みだけならメモリを専有しない
共有してれば書き込みでも専有しない
17/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
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
malloc()
malloc() に成功してもOSのメモリは確保されない
プロセスサイズは増える
領域を使った時に実際にOSのメモリが確保される
19/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
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
じゃあ使おうとした時にメモリ足りなくなったらどうなるの?
21/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
OOM Killer
22/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
OOM Killer
メモリ不足時に発動する無差別殺戮者
いきなり SIGKILL で殺される
23/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
OOM Killer
特定のプロセスが殺されないように
# echo -17 > /proc/PID/oom_adj
やったことないけど
24/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
OOM Killer
メモリ獲得時にエラーにしたい
# sysctl -w vm.overcommit_memory=2
やったことないけど
25/26
Linuxのメモリ - NSEG#21 Powered by Rabbit 1.0.4
まとめ
メモリまわりはややこしい
free を見てあわてない
OOM Killer こわい
26/26