Pro Yearly is on sale from $80 to $50! »

cgroup

864fdf25e50e2d92ebd5cb13db804bf9?s=47 MSR
August 26, 2017

 cgroup

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

864fdf25e50e2d92ebd5cb13db804bf9?s=128

MSR

August 26, 2017
Tweet

Transcript

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

    slide_20170826_cgroup
  2. ⽬次 前回の復習、今回の⽬標 fork爆弾爆発中のロードアベレージの取り⽅を考え る デモ まとめ 2  msr-i386 /

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

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

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

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

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

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

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

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

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

    コンテナ仮想化で重要な機能 11  msr-i386 / slide_20170826_cgroup
  12. できることの⼀例 特定のユーザーのリソースの制限 特定ユーザーの特定プロセスに対するリソースの制 限 →fork爆弾が発⽣しても制限が可能になる 12  msr-i386 / slide_20170826_cgroup

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

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

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

    # systemctl enable cgconfig # systemctl enable cgred 15  msr-i386 / slide_20170826_cgroup
  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
  17. 設定の反映 対象プロセスの確認 # systemctl restart cgconfig # systemctl restart cgred

    $ cat /sys/fs/cgroup/cpuset/forkbomb/tasks 17  msr-i386 / slide_20170826_cgroup
  18. <デモンストレーション> 18  msr-i386 / slide_20170826_cgroup

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

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

  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