Avatar for MSR
by MSR
Speaker Deck

Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

できることの⼀例 特定のユーザーのリソースの制限 特定ユーザーの特定プロセスに対するリソースの制 限 →fork爆弾が発⽣しても制限が可能になる 12  msr-i386 / slide_20170826_cgroup

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

設定例 /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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

参考 「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