Upgrade to Pro — share decks privately, control downloads, hide ads and more …

cgroup

MSR
August 26, 2017

 cgroup

fork爆弾爆発中のロードアベレージを見る
※fork爆弾を安易に実行する行為を推奨するものではありません。実行したことによる責任は誰も取りません

MSR

August 26, 2017
Tweet

More Decks by MSR

Other Decks in Technology

Transcript

  1. FORK爆弾爆発中の
    ロードアベレージを
    ⾒る
    @第30回シェル芸勉強会 ⼤阪サテライト (2017/08/26)
    1
     msr-i386 / slide_20170826_cgroup

    View Slide

  2. ⽬次
    前回の復習、今回の⽬標
    fork爆弾爆発中のロードアベレージの取り⽅を考え

    デモ
    まとめ
    2
     msr-i386 / slide_20170826_cgroup

    View Slide

  3. ⾃⼰紹介
    ハンドルネーム: MSR
    Webブラウザ の作者
    Twitter ID: @msr386
    Tungsten
    3
     msr-i386 / slide_20170826_cgroup

    View Slide

  4. 前回の復習
    fork爆弾実⾏時のロードアベレージ取得に成功した
    ※SysRqキーでカーネルパニックを起こし、クラッシュ
    ダンプを解析
    ⾼ロードアベレージを記録するには1時間回せば⼗

    24時間回しただけ無駄だった
    4
     msr-i386 / slide_20170826_cgroup

    View Slide

  5. 今回の⽬標
    fork爆弾爆発中のロードアベレージをリアルタイムで⾒
    たい
    5
     msr-i386 / slide_20170826_cgroup

    View Slide

  6. ロードアベレージを⾒る⽅法
    uptime / w
    top
    カーネルダンプの解析
    6
     msr-i386 / slide_20170826_cgroup

    View Slide

  7. UPTIME
    実⾏時点の稼働時間、ロードアベレージを表⽰
    W
    uptimeの結果+ログインユーザー⼀覧を表⽰
    7
     msr-i386 / slide_20170826_cgroup

    View Slide

  8. TOP
    ロードアベレージだけでなくプロセス⼀覧、CPU使⽤
    率、メモリ使⽤率を⼀定間隔で更新して表⽰
    ⼀⾔で⾔えば「多機能だが重い」
    カーネルダンプの解析
    ダンプした時点のuptime情報も同時に記録されている
    何度もダンプできないので、リアルタイム計測は不可能
    8
     msr-i386 / slide_20170826_cgroup

    View Slide

  9. FORK爆弾実⾏中にリアルタイムでロード
    アベレージを⾒る⼤きな壁
    CPU / メモリ リソースはfork爆弾によるプロセス⽣成
    ですぐに枯渇するから
    プロセスの起動もままならないのでuptimeやwは
    使⽤不能
    topでも割り当てられるCPUリソースがなくなるので
    応答停⽌
    9
     msr-i386 / slide_20170826_cgroup

    View Slide

  10. ⼤きな壁を越える⼿段:CGROUP
    10
     msr-i386 / slide_20170826_cgroup

    View Slide

  11. CGROUP
    Linuxカーネルに搭載されている強⼒なリソース制御
    機能
    ※CPUリソースは、優先度設定で使われるnice値と
    は⽐べものにならないほど強⼒
    Linuxカーネル 2.6.24から標準搭載
    リソース制限の対象: CPU、メモリ、ディスクI/O、ネッ
    トワーク・・・
    コンテナ仮想化で重要な機能
    11
     msr-i386 / slide_20170826_cgroup

    View Slide

  12. できることの⼀例
    特定のユーザーのリソースの制限
    特定ユーザーの特定プロセスに対するリソースの制

    →fork爆弾が発⽣しても制限が可能になる
    12
     msr-i386 / slide_20170826_cgroup

    View Slide

  13. CGROUP設定⽅針
    fork爆弾でCPUリソースを埋め尽くさないよう、1コア
    だけ使⽤しないようにする
    ※CPU使⽤率で制御するより単純︕
    fork爆弾でメモリを埋め尽くさないよう、メモリ上限を
    設定する
    13
     msr-i386 / slide_20170826_cgroup

    View Slide

  14. デモ環境
    CPU: 4コア (VM)
    メモリ: 16GB
    OS: CentOS 7
    14
     msr-i386 / slide_20170826_cgroup

    View Slide

  15. インストール
    ※⾃動起動を有効にする場合は以下を実⾏
    # yum install libcgroup
    # yum install libcgroup-tools
    # systemctl enable cgconfig
    # systemctl enable cgred
    15
     msr-i386 / slide_20170826_cgroup

    View Slide

  16. 設定例
    /etc/cgconfig.conf
    /etc/cgrules.conf
    group forkbomb {
    cpuset {
    # 使⽤するCPUコアの指定
    cpuset.cpus = "0-2";
    # 使⽤するメモリノードの指定(NUMAでなければ0でよい。必須)
    cpuset.mems = "0";
    }
    memory {
    # 上限1GB
    memory.limit_in_bytes = 1073741824;
    }
    }
    root:bash cpuset,memory /forkbomb
    16
     msr-i386 / slide_20170826_cgroup

    View Slide

  17. 設定の反映
    対象プロセスの確認
    # systemctl restart cgconfig
    # systemctl restart cgred
    $ cat /sys/fs/cgroup/cpuset/forkbomb/tasks
    17
     msr-i386 / slide_20170826_cgroup

    View Slide

  18. <デモンストレーション>
    18
     msr-i386 / slide_20170826_cgroup

    View Slide

  19. 設定上の注意
    cgconfig.confによる設定はCentOS7では⾮推奨とさ
    れている
    fork爆弾実⾏時のシェルと、ログインで使⽤するシェ
    ルは別にしなければならない
    メモリ制限に引っかかりcgroupがシェルを強制終了
    させるから
    (デモではcgroup制御対象はbash、ログインシェルは
    zsh)
    19
     msr-i386 / slide_20170826_cgroup

    View Slide

  20. まとめ
    CPUやメモリを⾷い尽くすfork爆弾の制御はcgroup
    で!
    20
     msr-i386 / slide_20170826_cgroup

    View Slide

  21. 参考
    「Red Hat Enterprise Linux 7 リソース管理ガイド」
    「cgroupsを利⽤したリソースコントロール⼊⾨ — | サイ
    https://access.redhat.com/documentation/ja-
    JP/Red_Hat_Enterprise_Linux/7/pdf/Resource_Mana
    7-Resource_Management_Guide-ja-JP.pdf
    https://oss.sios.com/yorozu-blog/cgroups-20150708
    21
     msr-i386 / slide_20170826_cgroup

    View Slide