Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
cgroup
Search
MSR
August 26, 2017
Technology
1.5k
0
Share
cgroup
fork爆弾爆発中のロードアベレージを見る
※fork爆弾を安易に実行する行為を推奨するものではありません。実行したことによる責任は誰も取りません
MSR
August 26, 2017
More Decks by MSR
See All by MSR
horizon
msr_i386
0
1.4k
fujiaire by shell
msr_i386
0
1.1k
colaboratory
msr_i386
0
180
yes command faster
msr_i386
0
450
Amazon Dash Hack
msr_i386
0
1.4k
discover fork-bomb
msr_i386
0
2k
kanji banner
msr_i386
0
1.9k
ASCII art oneliner
msr_i386
0
2.1k
QR Code Shell
msr_i386
0
2.4k
Other Decks in Technology
See All in Technology
AgentCore×VPCでの設計パターンn選と勘所
har1101
4
330
プラットフォームエンジニアリングの実践 - AWS コンテナサービスで構築する社内プラットフォーム / AWS Containers Platform Meetup #1
literalice
1
220
AWS Agent Registry の基礎・概要を理解する/aws-agent-registry-intro
ren8k
3
410
はじめての MagicPod生成AI機能 機能紹介から活用方法まで
magicpod
0
120
Hacobu Tech Deck
hacobu
PRO
0
130
弁護士ドットコム株式会社 エンジニア職向け 会社紹介資料
bengo4com
1
190
AI活用時代の事業判断高度化を導くエンジニアリング基盤 / 20260424 Atsushi Funahashi
shift_evolve
PRO
2
100
Do Vibe Coding ao LLM em Produção para Busca Agêntica - TDC 2026 - Summit IA - São Paulo
jpbonson
3
160
EMから幅を広げるために最近挑戦していること / Recent challenges I'm undertaking to expand my horizons beyond EM
hiro_torii
1
140
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
3
2.7k
エージェントスキルを作って自分のインプットに役立てよう
tsubakimoto_s
0
460
20260428_Product Management Summit_Loglass_JoeHirose
loglassjoe
3
4k
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
530
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.9k
A Modern Web Designer's Workflow
chriscoyier
698
190k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.5k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Building Applications with DynamoDB
mza
96
7k
Design in an AI World
tapps
1
200
Bash Introduction
62gerente
615
210k
Become a Pro
speakerdeck
PRO
31
5.9k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
180
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