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
90
1
Share
Linuxシステム概要
社内勉強会ではなしたもの
Shota Ito
April 12, 2019
More Decks by Shota Ito
See All by Shota Ito
PHPカンファレンス小田原2024/PHP Conference ODAWARA 2024
st1t
0
2.3k
おうちのインターネットが少しだけ早くなるかもしれないおはなし
st1t
0
120
GitLab MeetupでLTした内容
st1t
0
90
SRE本完走して社内勉強会で共有したもの
st1t
0
74
Other Decks in Technology
See All in Technology
新卒エンジニア研修、ハンズオンの設計における課題と実践知/ #tachikawaany
nishiuma
2
120
ServiceによるKubernetes通信制御ーClusterIPを例に
miku01
1
140
Building Production-Ready Agents Microsoft Agent Framework
_mertmetin
0
160
AgentCore Managed Harness を使ってみよう
yakumo
2
320
大学職員のための生成AI最前線 :最前線を、AIガバナンスとして読み直すためのTips
gmoriki
2
3.6k
GitHub Copilot Dev Days
tomokusaba
0
150
FessのAI検索モード:検索システムとLLMへの取り組み
marevol
0
270
Forget technical debt
ufried
0
170
20260428_Product Management Summit_tadokoroyoshiro
tadokoro_yoshiro
15
18k
Percolatorを廃止し、マルチ検索サービスへ刷新した話 / Search Engineering Tech Talk 2026 Spring
visional_engineering_and_design
0
320
ブラウザの投機的読み込みと投機ルールAPIを理解し、Webサービスのパフォーマンスを最適化する
shuta13
3
280
Reasoning Models in Practice: From Inference- Time to Training-Time Scaling on Verifiable Tasks
nptdat
0
110
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
130
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
200
Statistics for Hackers
jakevdp
799
230k
Odyssey Design
rkendrick25
PRO
2
610
Design in an AI World
tapps
1
210
Designing Experiences People Love
moore
143
24k
ラッコキーワード サービス紹介資料
rakko
1
3.2M
Abbi's Birthday
coloredviolet
2
7.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Documentation Writing (for coders)
carmenintech
77
5.3k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
190
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