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
Working with UNIX Process 6/7 Chapter
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuta Totz
March 05, 2016
Programming
81
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Working with UNIX Process 6/7 Chapter
Yuta Totz
March 05, 2016
More Decks by Yuta Totz
See All by Yuta Totz
ウガンダでXcodeをアップデートする方法
totzyuta
0
140
珈琲と僕
totzyuta
0
120
読んで理解するActiveRecordの設計とActiveSupport::Concern
totzyuta
4
1.7k
TDDとVimと
totzyuta
1
560
モテる!筋肉コンパイラ自作入門 - 草食男子からの卒業
totzyuta
0
470
Git/GitHub入門-GitHubでたのしいチーム開発
totzyuta
0
320
Vimmer幼稚園
totzyuta
2
120
たのしいたーみなる
totzyuta
0
60
Other Decks in Programming
See All in Programming
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
0
1.1k
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
380
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
160
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
720
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
180
Google Apps Script で Ruby を動かす
kawahara
0
120
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
190
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
290
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
380
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
260
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
420
その節約、円になってますか?
isamumumu
1
640
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
370
Side Projects
sachag
455
43k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Crafting Experiences
bethany
1
230
A Tale of Four Properties
chriscoyier
163
24k
sira's awesome portfolio website redesign presentation
elsirapls
0
310
Building Adaptive Systems
keathley
44
3.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Building Applications with DynamoDB
mza
96
7.1k
Transcript
Working with UNIX Process 6. Resource Limit / 7. Environment
of Processes
ࠓֶͿ͜ͱ • ϓϩηεʹϦιʔεͷ੍ݶ͕͋Δ • ੍ݶͷݟ͚ͭํ • ιϑτϦϛοτͷҾ্͖͛ɺ੍ݶ • ϓϩηεʹڥ͕͋Δ •
ڥมͷࢀরͷํ
6ষ ϓϩηεͷϦιʔε੍ݶ
ϓϩηεʹϦιʔεͷ੍ݶ͕ ͋Δ • Ϧιʔε͕ด͡ΒΕͳ͍ͱϑΝΠϧσΟεΫϦϓλ ͷ൪߸͕૿Ճ͠ଓ͚Δ • 1ϓϩηε͋ͨΓͲΕ͘Β͍ͷϑΝΠϧσΟεΫϦ ϓλΛ࣋ͯΔͷ͔ʁ • =>
ΧʔωϧʹΑͬͯ1ϓϩηε͝ͱʹϦιʔεͷ੍ ݶ͕ઃఆ͞Ε͍ͯΔʂ
੍ݶΛݟ͚ͭΔ • :NOFILEγϯϘϧΛҾʹ͢Δ (Φϓγϣϯతͳ) • [ϑΝΠϧσΟεΫϦϓλͷιϑτϦϛοτ, ~ͷϋʔυϦϛοτ] • http://rurema.clear-code.com/1.9.3/method/Process/m/ getrlimit.html
p Process.getrlimit(:NOFILE) => [256, 9223372036854775807]
ιϑτϦϛοτͱϋʔυϦϛο τ • ιϑτϦϛοτιϑτଆͰنఆ্ͨ͠ݶ • มߋͰ͖Δ • ࣮ମϋʔυϦϛοτͰɺͬͪ͜ͱΜͰͳ͘େ͖ͳ •
sysctl(8) • http://www.usupi.org/sysad/240.html
ιϑτϦϛοτΛҾ্͖͛Δ • ୈ̏ҾͰ৽͍͠ϋʔυϦϛοτࢦఆͰ͖ Δ Process.setrlimit(:NOFILE, 4096) p Process.getrlimit(:NOFILE) => [4096,
4096]
ιϑτϦϛοτΛҾ্͖͛Δ • ιϑτϦϛοτΛϋʔυϦϛοτͷ·ͰҾ ্͖͛Δ ɹProcess.setrlimit(:NOFILE, Process.getrlimit(:NOFILE)[1])
੍ݶΛ͑ͨͱ͖ • ιϑτϦϛοτΛ͑ͨ߹ʹErrno::EMFILEྫ֎Λൃੜ͢Δ # ΦʔϓϯͰ͖ΔϑΝΠϧͷ࠷େΛ3ʹઃఆ # ඪ४ετϦʔϜͰϑΝΠϧσΟεΫϦϓλΛ3ͭ͏ͨΊ # ͢Ͱʹ্ݶʹୡ͍ͯ͠Δঢ়ଶʹͳΔ Process.setrlimit(:NOFILE,
3) File.open(‘/dev/null’) Errno::EMFILE: Too many open files - /dev/null
ͦͷଞͷγεςϜϦιʔεͷ੍ݶͷ֬ೝɾมߋ • Process.getrlimitʹͤΔΦϓγϣϯͷϦετυΩϡϝϯτࢀরɹ • http://ruby-doc.org/core-1.9.3/Process.html#method-c-setrlimit # ϓϩηεͷϢʔβ͕࡞Ͱ͖Δ࠷େϓϩηε Process.getrlimit(:NPROC) # ϓϩηε͕࡞Ͱ͖ΔϑΝΠϧαΠζͷ࠷େ
Process.getrlimit(:FSIZE) # ϓϩηεελοΫͷ࠷େαΠζ Process.getrlimit(:STACK)
࣮༻ྫ • γεςϜϦιʔεͷ੍ݶͷมߋ͕ඞཁʹͳΔϓϩάϥϜ͋Μ·ͳ͍…ɻ͚Ͳಛ ผͳ༻్ͷπʔϧͰͱͯॏཁʹͳΔ • ex. ϓϩηε͕ಉ࣌ʹઍͷωοτϫʔΫίωΫγϣϯΛѻ͏ඞཁ͕͋Δ • httpύϑΥʔϚϯεπʔϧͷhttperf(1) •
httperf —hog —server www —num-conn 5000 • => ಉ࣌ʹ5000ͷίωΫγϣϯΛ࡞͠Α͏ͱ͢Δ • ιϑτϦϛοτ͕σϑΥϧτͩͱ໌Β͔ʹ·͍ͣͷͰɺhttperf(1)࣮ߦલʹࣗ ͷιϑτϦϛοτΛҾ্͖͛Δ
࣮༻ྫ (2) • ੍ݶ͢Δྫ • ୈࡾऀͷίʔυͷ࣮ߦ࣌ʹ੍Λ͚ͭΔ • ϓϩηεࣗʹڐ͞Ε͍ͯΔҎ্ͷϦιʔε ͑ͳ͘ͳΔ
6ষͷγεςϜίʔϧ • getrlimit(2) • Process.getrlimit • setr-limit(2) • Process.setrlimit
7ষ ϓϩηεͷڥ
ϓϩηεʹڥ͕͋Δ • ʮڥʯʹʮڥมʯ • keyͱvalueͷΈ߹Θͤ => ϓϩηεͰ͑ΔσʔλΛ อ࣋͢Δͷ • શͯͷࢠϓϩηεϓϩηε͔ΒڥมΛҾ͖ܧ͙
• ڥมϓϩηε͝ͱʹଘࡏ͠ɺͦΕͧΕͷϓϩηε ͰάϩʔόϧʹΞΫηεͰ͖Δ
example $ MESSAGE=‘wing it’ ruby -e “puts ENV[‘MESSAGE’]” ENV[‘MESSAGE’] =
‘wing it’ system “echo $MESSAGE”
͜Εͬͯϋογϡʁ • ϋογϡΦϒδΣΫτͰͳ͍ (merge͕ͳ͍ͱ ͔) => ϋογϡϥΠΫʹΞΫηεͰ͖ΔAPI͕༻ ҙ͞Ε͍ͯΔ Process.setrlimit(:NOFILE, 4096)
p Process.getrlimit(:NOFILE) => [4096, 4096] puts ENV[‘EDITOR’] => vim puts ENV.has_key?(‘PATH’) => true puts ENV.is_a?(Hash) => false
࣮༻ྫ • ίϚϯυϥΠϯπʔϧʹೖྗΛ͢ํ๏ͱͯ͠Α͘࠾༻͞ΕΔ • ͜ͷํ͕ίϚϯυϥΠϯ͔Β༩͑ΒΕͨΦϓγϣϯΛղੳ͢ ΔΑΓϥΫͱ͍͏ϝϦοτ͋Δ Process.setrlimit(:NOFILE, 4096) p Process.getrlimit(:NOFILE)
=> [4096, 4096] ENV.is $ RAILS_ENV=production rails server $ EDITOR=mate bundle open actionpack $ QUEUE=default rake resque:work
7ষͷγεςϜίʔϧ • setenv(3), getenv(3) • ڥมΛѻ͏Cݴޠͷؔ • environ(7)
ࠓֶͿ͜ͱ • ϓϩηεʹϦιʔεͷ੍ݶ͕͋Δ • ੍ݶͷݟ͚ͭํ • ιϑτϦϛοτͷҾ্͖͛ɺ੍ݶ • ϓϩηεʹڥ͕͋Δ •
ڥมͷࢀরͷํ