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.7k
おうちのインターネットが少しだけ早くなるかもしれないおはなし
st1t
0
120
GitLab MeetupでLTした内容
st1t
0
80
SRE本完走して社内勉強会で共有したもの
st1t
0
53
Other Decks in Technology
See All in Technology
Getting to Know Your Legacy (System) with AI-Driven Software Archeology (WeAreDevelopers World Congress 2025)
feststelltaste
1
180
QuickSight SPICE の効果的な運用戦略~S3 + Athena 構成での実践ノウハウ~/quicksight-spice-s3-athena-best-practices
emiki
0
230
敢えて生成AIを使わないマネジメント業務
kzkmaeda
2
500
対話型音声AIアプリケーションの信頼性向上の取り組み
ivry_presentationmaterials
1
600
AIエージェントが書くのなら直接CloudFormationを書かせればいいじゃないですか何故AWS CDKを使う必要があるのさ
watany
14
5.9k
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
10
130k
LLM時代の検索
shibuiwilliam
2
620
freeeのアクセシビリティの現在地 / freee's Current Position on Accessibility
ymrl
2
260
20250708オープンエンドな探索と知識発見
sakana_ai
PRO
3
550
モニタリング統一への道のり - 分散モニタリングツール統合のためのオブザーバビリティプロジェクト
niftycorp
PRO
1
220
United airlines®️ USA Contact Numbers: Complete 2025 Support Guide
unitedflyhelp
0
330
CDK Toolkit Libraryにおけるテストの考え方
smt7174
1
360
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
How to Think Like a Performance Engineer
csswizardry
25
1.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Docker and Python
trallard
44
3.5k
Into the Great Unknown - MozCon
thekraken
40
1.9k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
We Have a Design System, Now What?
morganepeng
53
7.7k
Producing Creativity
orderedlist
PRO
346
40k
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