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
Linuxシステム概要
Search
Shota Ito
April 12, 2019
Technology
1
77
Linuxシステム概要
社内勉強会ではなしたもの
Shota Ito
April 12, 2019
Tweet
Share
More Decks by Shota Ito
See All by Shota Ito
PHPカンファレンス小田原2024/PHP Conference ODAWARA 2024
st1t
0
1.8k
おうちのインターネットが少しだけ早くなるかもしれないおはなし
st1t
0
120
GitLab MeetupでLTした内容
st1t
0
81
SRE本完走して社内勉強会で共有したもの
st1t
0
53
Other Decks in Technology
See All in Technology
人工衛星のファームウェアをRustで書く理由
koba789
15
7.9k
Android Audio: Beyond Winning On It
atsushieno
0
850
オブザーバビリティが広げる AIOps の世界 / The World of AIOps Expanded by Observability
aoto
PRO
0
380
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
170
「全員プロダクトマネージャー」を実現する、Cursorによる仕様検討の自動運転
applism118
21
11k
20250913_JAWS_sysad_kobe
takuyay0ne
2
220
AWSで始める実践Dagster入門
kitagawaz
1
620
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
240
【初心者向け】ローカルLLMの色々な動かし方まとめ
aratako
7
3.5k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
12
4.8k
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
990
Agile PBL at New Grads Trainings
kawaguti
PRO
1
430
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
51k
A better future with KSS
kneath
239
17k
Code Reviewing Like a Champion
maltzj
525
40k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Site-Speed That Sticks
csswizardry
10
820
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
KATA
mclloyd
32
14k
Code Review Best Practice
trishagee
70
19k
Designing for Performance
lara
610
69k
RailsConf 2023
tenderlove
30
1.2k
Typedesign – Prime Four
hannesfritz
42
2.8k
Transcript
PLAT FORM TEAM SHOTA ITO LINUXγεςϜ֓ཁ
LINUXγεςϜʹ͍ͭͯ ͓ଋ ▸ ࠓΧʔωϧͦͷͷ·Ͱߦ͖ண͖·ͤΜ ▸ ࠓ͢͜ͱΉ͍ͣͰ͢ ▸ ͍ͯ͏͔ɺࢲΘ͔Βͳ͍͜ͱ͕΄΅શͯͰ͢ ▸ Θ͔Βͳ͍ͷ͕ී௨Ͱ͢
▸ ੲͷϓϩάϥϚʔCΛॻ͍ͨܦݧ͔ΒΘ͔Δ͔ ▸ ςʔϚ͕େ͖͗͢ΔͷͰ֓ཁఔͰ͢ ▸ ڵຯΛ࣋ͬͨਓ͕͍ͨΒݸผʹฉ͍͍ͯͩ͘͞
LINUXγεςϜʹ͍ͭͯ ಥવͰ͕͢ LinuxͬͯԿͰ͔͢ʁ
LINUXʢϦφοΫεɺଞͷಡΈޙड़ʣɺ UNIXϥΠΫͳOSΧʔωϧͰ͋ΔLINUXΧʔω ϧɺ͓ΑͼͦΕΛΧʔωϧͱͯ͠पลΛඋ͠ ͨγεςϜɻ Wikipedia
Χʔωϧ σόΠε σόΠευϥΠό εϨου εέδϡʔϥ ϑΝΠϧ γεςϜ ωοτϫʔΫ ελοΫ ԾϝϞϦ
γεςϜίʔϧ ϢʔβϨϕϧ ΧʔωϧϨϕϧ γεςϜϥΠϒϥϦ σʔλϕʔε ΞϓϦέʔγϣϯ
LINUXγεςϜʹ͍ͭͯ ΞϓϦͱΧʔωϧͷؔΘΓํ ▸ ΞϓϦέʔγϣϯϥΠϒϥϦΛ௨ͯ͠ΧʔωϧʹγεςϜ ίʔϧΛൃߦ͍ͯ͠Δ͚ͩ
LINUXγεςϜʹ͍ͭͯ γεςϜϥΠϒϥϦʹ͍ͭͯ
Χʔωϧ σόΠε σόΠευϥΠό εϨου εέδϡʔϥ ϑΝΠϧ γεςϜ ωοτϫʔΫ ελοΫ ԾϝϞϦ
γεςϜίʔϧ ϢʔβϨϕϧ ΧʔωϧϨϕϧ γεςϜϥΠϒϥϦ σʔλϕʔε ΞϓϦέʔγϣϯ
LINUXγεςϜʹ͍ͭͯ γεςϜϥΠϒϥϦͬͯʁ ▸ ༗໊Ͳ͜Ζglibc(GNU C Library) ▸ phpjava࠷ऴతʹglibcΛinclude͍ͯ͠Δ ˞ͪΖΜଞʹࢁinclude͍ͯ͠·͢ ▸
openldap-devel.x86_64, openssl-devel.x86_64, zlib- devel.x86_64… ▸ GNU: GNUͱΦϖϨʔςΟϯάγεςϜͰ͋Γɺ ͔ͭίϯϐϡʔλιϑτΣΞͷൣғʹΔίϨΫγϣϯͰ͋Δɻ (wiki͔ΒҾ༻)
LINUXγεςϜʹ͍ͭͯ MYSQLI.C
LINUXγεςϜʹ͍ͭͯ ZEND_ALLOC.H
LINUXγεςϜʹ͍ͭͯ ZEND_ALLOC.H
LINUXγεςϜʹ͍ͭͯ γεςϜίʔϧʹ͍ͭͯ
Χʔωϧ σόΠε σόΠευϥΠό εϨου εέδϡʔϥ ϑΝΠϧ γεςϜ ωοτϫʔΫ ελοΫ ԾϝϞϦ
γεςϜίʔϧ ϢʔβϨϕϧ ΧʔωϧϨϕϧ γεςϜϥΠϒϥϦ σʔλϕʔε ΞϓϦέʔγϣϯ
LINUXγεςϜʹ͍ͭͯ γεςϜίʔϧͬͯʁ ▸ γεςϜίʔϧɺΞϓϦέʔγϣϯͱ Linux Χʔωϧͱͷ ؒͷجຊతͳΠϯλʔϑΣʔεͰ͋Δɻ(※1) ▸ ϋʔυΣΞΛ͍͘͡ΔͱݖݶΛӽͯ͠ΞΫηεͰ͖ ͯ͠·͏ͨΊɺΧʔωϧ͕ࢦࣔΛड͚͚ΔͨΊͷΠϯλʔ
ϑΣʔε ▸ ex)ϝϞϦΛ֬อͯ͠ʂ௨৴͍͔ͨ͠ΒιέοτΛ։͍ ͯʂϓϩηεΛϑΥʔΫͯ͠ʂ
LINUXγεςϜʹ͍ͭͯ ͲΜͳγεςϜίʔϧ͕͋Δͷ͔ ▸ read/write: ϑΝΠϧσΟεΫϦϓλΛͬͯbyteΛಡΜͰ bufferʹͷͤΔ ▸ mallocɿϝϞϦΛ֬อ͢Δͱ͖ʹίʔϧ͢Δ ▸ clone(fork)ɿϓϩηεΛϑΥʔΫ͢Δ࣌ʹίʔϧ͢Δ
▸ getsocknameɿιέοτͷ໊લΛऔಘ͢Δ࣌ʹίʔϧ͢Δ ▸ accept,accept4 : ιέοτͷଓΛड͚Δ࣌ʹίʔϧ͢Δ
LINUXγεςϜʹ͍ͭͯ APACHE HTTPDͷγεςϜίʔϧΛͷ͍ͧͯݟΔ ▸ શίʔϧΛऔಘ # strace $(for pid in
`pgrep httpd`;do echo -n "-p $pid ";done) ▸ getsockname,accept,accept4Λऔಘ # strace $(for pid in `pgrep httpd`;do echo -n "-p $pid ";done) -e trace=getsockname,accept,accept4 ▸ grepͰߜΔ࣌ strace $(for pid in `pgrep httpd`;do echo -n "-p $pid ";done) 2>&1 | grep '192.168.120.129' ▸ iptablesͰःஅ͢Δͱίʔϧঢ়ଶͲ͏ͳΔʁ
LINUXγεςϜʹ͍ͭͯ TIPS: ύΠϓͷΈ ▸ Α͘͏ʮ|ʯͬͯͲ͏͍͏ͷͳͷ͔ ▸ ΧʔωϧͷϦϯάόοϑΝʹଓ͞ΕͨύΠϓσΟεΫϦϓ λΛհͯ͠௨৴͍ͯ͠Δ
LINUXγεςϜʹ͍ͭͯ TIPS: ύΠϓͷΈˏ֬ೝͯ͠ΈΔ ▸ ྫɿ$ cat hoge.txt | grep ito
▸ ʮcat | grep itoʯΛίʔϧϨϕϧͰ͍͔͚ͯΈΔ ▸ strace -p `pgrep cat` ▸ strace -p `pgrep grep` ▸ lsof -p `pgrep cat` ▸ lsof -p `pgrep grep`
ςΩετ
LINUXγεςϜʹ͍ͭͯ TIPS: ύΠϓͷΈˏղઆ CAT ϓϩηε GREP ϓϩηε Χʔωϧ͕༻ҙ͍ͯ͠ΔϦϯάόοϑΝ /DEV/PTS/0 ϓϩηε
pipe:[412981] ᶃϑΝΠϧσΟεΫϦϓλ̌(࣮ମɿ/dev/pts/0)ΛಡΉ read(0, “hoge¥n”, 65536) ᶄϑΝΠϧσΟεΫϦϓλ̍(࣮ମɿpipe:[412981])ॻ͖ࠐΉ write(1, “hoge¥n”, 5) ᶅϑΝΠϧσΟεΫϦϓλ̌(࣮ମɿpipe:[412981])ΛಡΉ read(0, “hoge¥n”, 32768) write callʹ͍ͭͯ read callʹ͍ͭͯ ϦϯάόοϑΝʹ͍ͭͯ ϑΝΠϧσΟεΫϦϓλʹ͍ͭͯ
LINUXγεςϜʹ͍ͭͯ ΧʔωϧपΓࠓҰ୴͜͜·Ͱ
LINUXγεςϜʹ͍ͭͯ ͜ͷࣝͲ͜Ͱ͍͖ͯ͘Δʁ
LINUXγεςϜʹ͍ͭͯ ϦϦʔεલੑೳτϥϒϧγϡʔτ(࣮ WEB APP ▸ ͳΜ͔Α͘Θ͔Βͳ͍͚Ͳɺ͍ʂௐࠪͯ͠ʂ DB LB ϨεϙϯεͲΕ͘Β ͍Ͱฦ͍ͯ͠Δʁ
Τϥʔʁ ͳͦ͞͏ ΞϓϦͷϨεϙϯε&Τϥʔ ͳͦ͞͏ʁ Ϩεϙϯε͕Ͱͯͳ͍ !! DBॏ͘ͳ͍ʁ ͳͦ͞͏
LINUXγεςϜʹ͍ͭͯ ϦϦʔεલੑೳτϥϒϧγϡʔτ(࣮ APP ▸ APPͷγεςϜίʔϧάϥϑΛऔͬͯΈͨΒ େମׂ̐҉߸ԽॲཧϥΠϒϥϦͷಡΈग़͠ʹ͔͔͍ͬͯͨ ▸ ΞϓϦνʔϜͷਓ͑ͯɺ ҉߸ԽॲཧͷΞϧΰϦζϜΛݟͯ͠Βͬͯղܾ γεςϜίʔϧΛऔಘͭͭ͠
ෛՙΛ͔͚ͯΒͬͯ༰Λ֬ೝ ࢀߟɿCPU Flame Graphs
LINUXγεςϜʹ͍ͭͯ ࣗମΛѲ͢Δ ࢀߟɿLinux Performance Tools
LINUXγεςϜʹ͍ͭͯ ύϑΥʔϚϯενϡʔχϯά ▸ ιέοτ௨৴͍ͯ͠Δ͔ΒϑΝΠϧσΟεΫϦϓλΛ૿͠ ͨํ͕ྑ͍ΑͶ ▸ σʔλϕʔεͷΩϟογϡཧOSͱΞϓϦͲͬͪʹͤ Δʁ ▸ CPU༻͕ߴ͍ʂ
▸ ϢʔβϥϯυʁΧʔωϧϥϯυʁίϯςΩετεΠονʁ
LINUXγεςϜʹ͍ͭͯ ϛυϧΣΞͷΦϓγϣϯ֬ೝ ▸ NginxͷϩάϑΥʔϚοτΦϓγϣϯͬͯυΩϡϝϯτ؆ ୯ʹ͔͠ॻ͍ͯͳ͍͚ͲɺͲ͏ͳ͍ͬͯΔʁ ▸ dstatͷग़ྗͰσʔλ߲͕Γͳ͍ؾ͕͢Δ͚Ͳɺ Ͳ͏ͳ͍ͬͯΔʁ
LINUXγεςϜʹ͍ͭͯ ࢀߟ
LINUXγεςϜʹ͍ͭͯ ࢀߟ(ΏΔ;Θ) ▸ ;ͭ͏ͷLinuxϓϩάϥϛϯά ▸ dstatͷίʔυ͔ΒಡΈղ͘Linuxೖ@tcpΦϓγϣϯฤ ▸ ApacheͷΞΫηε੍ޚݕূΛՄࢹԽ͠ͳ͕ΒͬͯΈͨ
LINUXγεςϜʹ͍ͭͯ ࢀߟ(Ψν) ▸ Linux Networking Architecture ▸ gdb Debugging Full
Example (Tutorial): ncurses
LINUXγεςϜʹ͍ͭͯ Q&A ▸ tcpdumpͲͷϨΠϠʔ͔ΒΩϟϓνϟͨ͠ύέοτΛ ࣋ͬͯདྷ͍ͯΔʁ ▸ Device driver͔Β ࣋ͬͯདྷ͍ͯΔ Ҿ༻ɿLinux
Network Internals