Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
cgroup
Search
MSR
August 26, 2017
Technology
1.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
cgroup
fork爆弾爆発中のロードアベレージを見る
※fork爆弾を安易に実行する行為を推奨するものではありません。実行したことによる責任は誰も取りません
MSR
August 26, 2017
More Decks by MSR
See All by MSR
horizon
msr_i386
0
1.5k
fujiaire by shell
msr_i386
0
1.2k
colaboratory
msr_i386
0
190
yes command faster
msr_i386
0
470
Amazon Dash Hack
msr_i386
0
1.4k
discover fork-bomb
msr_i386
0
2k
kanji banner
msr_i386
0
2k
ASCII art oneliner
msr_i386
0
2.1k
QR Code Shell
msr_i386
0
2.4k
Other Decks in Technology
See All in Technology
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
120
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
460
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
Omarchy Quattro の日本語設定周り
simosako
2
180
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
1.5k
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
160
Reactの設計論
uhyo
24
13k
omasushiというライブラリを作った
polidog
PRO
0
230
range over func 2年間の軌跡 Issue #56413 はGoのエコシステムをどう変えたか
ryujicre8ive
0
190
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
730
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
120
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
590
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
420
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
420
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
600
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
690
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Designing for Performance
lara
611
70k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Transcript
FORK爆弾爆発中の ロードアベレージを ⾒る @第30回シェル芸勉強会 ⼤阪サテライト (2017/08/26) 1 msr-i386 /
slide_20170826_cgroup
⽬次 前回の復習、今回の⽬標 fork爆弾爆発中のロードアベレージの取り⽅を考え る デモ まとめ 2 msr-i386 /
slide_20170826_cgroup
⾃⼰紹介 ハンドルネーム: MSR Webブラウザ の作者 Twitter ID: @msr386 Tungsten 3
msr-i386 / slide_20170826_cgroup
前回の復習 fork爆弾実⾏時のロードアベレージ取得に成功した ※SysRqキーでカーネルパニックを起こし、クラッシュ ダンプを解析 ⾼ロードアベレージを記録するには1時間回せば⼗ 分 24時間回しただけ無駄だった 4 msr-i386
/ slide_20170826_cgroup
今回の⽬標 fork爆弾爆発中のロードアベレージをリアルタイムで⾒ たい 5 msr-i386 / slide_20170826_cgroup
ロードアベレージを⾒る⽅法 uptime / w top カーネルダンプの解析 6 msr-i386 /
slide_20170826_cgroup
UPTIME 実⾏時点の稼働時間、ロードアベレージを表⽰ W uptimeの結果+ログインユーザー⼀覧を表⽰ 7 msr-i386 / slide_20170826_cgroup
TOP ロードアベレージだけでなくプロセス⼀覧、CPU使⽤ 率、メモリ使⽤率を⼀定間隔で更新して表⽰ ⼀⾔で⾔えば「多機能だが重い」 カーネルダンプの解析 ダンプした時点のuptime情報も同時に記録されている 何度もダンプできないので、リアルタイム計測は不可能 8 msr-i386
/ slide_20170826_cgroup
FORK爆弾実⾏中にリアルタイムでロード アベレージを⾒る⼤きな壁 CPU / メモリ リソースはfork爆弾によるプロセス⽣成 ですぐに枯渇するから プロセスの起動もままならないのでuptimeやwは 使⽤不能 topでも割り当てられるCPUリソースがなくなるので
応答停⽌ 9 msr-i386 / slide_20170826_cgroup
⼤きな壁を越える⼿段:CGROUP 10 msr-i386 / slide_20170826_cgroup
CGROUP Linuxカーネルに搭載されている強⼒なリソース制御 機能 ※CPUリソースは、優先度設定で使われるnice値と は⽐べものにならないほど強⼒ Linuxカーネル 2.6.24から標準搭載 リソース制限の対象: CPU、メモリ、ディスクI/O、ネッ トワーク・・・
コンテナ仮想化で重要な機能 11 msr-i386 / slide_20170826_cgroup
できることの⼀例 特定のユーザーのリソースの制限 特定ユーザーの特定プロセスに対するリソースの制 限 →fork爆弾が発⽣しても制限が可能になる 12 msr-i386 / slide_20170826_cgroup
CGROUP設定⽅針 fork爆弾でCPUリソースを埋め尽くさないよう、1コア だけ使⽤しないようにする ※CPU使⽤率で制御するより単純︕ fork爆弾でメモリを埋め尽くさないよう、メモリ上限を 設定する 13 msr-i386 /
slide_20170826_cgroup
デモ環境 CPU: 4コア (VM) メモリ: 16GB OS: CentOS 7 14
msr-i386 / slide_20170826_cgroup
インストール ※⾃動起動を有効にする場合は以下を実⾏ # yum install libcgroup # yum install libcgroup-tools
# systemctl enable cgconfig # systemctl enable cgred 15 msr-i386 / slide_20170826_cgroup
設定例 /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
設定の反映 対象プロセスの確認 # systemctl restart cgconfig # systemctl restart cgred
$ cat /sys/fs/cgroup/cpuset/forkbomb/tasks 17 msr-i386 / slide_20170826_cgroup
<デモンストレーション> 18 msr-i386 / slide_20170826_cgroup
設定上の注意 cgconfig.confによる設定はCentOS7では⾮推奨とさ れている fork爆弾実⾏時のシェルと、ログインで使⽤するシェ ルは別にしなければならない メモリ制限に引っかかりcgroupがシェルを強制終了 させるから (デモではcgroup制御対象はbash、ログインシェルは zsh) 19
msr-i386 / slide_20170826_cgroup
まとめ CPUやメモリを⾷い尽くすfork爆弾の制御はcgroup で! 20 msr-i386 / slide_20170826_cgroup
参考 「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