SlideShare a Scribd company logo
1 of 27
Download to read offline
Linuxのメモリ
                           NSEG#21

                        とみたまさひろ
                            2011-11-12



Linuxのメモリ - NSEG#21         Powered by Rabbit 1.0.4
自己紹介

      とみたまさひろ
      mailto:tommy@tmtm.org
      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
メモリ
            不足!
Linuxのメモリ - NSEG#21
                                     6/26
                      Powered by Rabbit 1.0.4
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
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
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 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
メモリは共有される


      親と子
      実行コード
      /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/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
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
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
Linuxのメモリ - NSEG#21
                                    22/26
                      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
Linuxのメモリ - NSEG#21         Powered by Rabbit 1.0.4

More Related Content

More from Masahiro Tomita

本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコルMasahiro Tomita
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわいMasahiro Tomita
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版Masahiro Tomita
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版Masahiro Tomita
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情Masahiro Tomita
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャルMasahiro Tomita
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトMasahiro Tomita
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話Masahiro Tomita
 

More from Masahiro Tomita (20)

Ruby 2.5
Ruby 2.5Ruby 2.5
Ruby 2.5
 
本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわい
 
CSV
CSVCSV
CSV
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
 
Ruby24
Ruby24Ruby24
Ruby24
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
MySQLを拡張する
MySQLを拡張するMySQLを拡張する
MySQLを拡張する
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル
 
MyNAができるまで
MyNAができるまでMyNAができるまで
MyNAができるまで
 
文字化け
文字化け文字化け
文字化け
 
Crystal
CrystalCrystal
Crystal
 
メールの暗号化
メールの暗号化メールの暗号化
メールの暗号化
 
文字化け
文字化け文字化け
文字化け
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライト
 
🍣=🍺
🍣=🍺🍣=🍺
🍣=🍺
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 

Recently uploaded

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (9)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

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