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
プールにゆこう
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
irof
March 25, 2024
Programming
2
520
プールにゆこう
関ジャバ'24 3月度
https://kanjava.connpass.com/event/311167/
3月後半でもう春だよなぁプール開きだよなぁと思ってたんだけど、当日クソ寒かった。
irof
March 25, 2024
Tweet
Share
More Decks by irof
See All by irof
視座の上げ方
irof
1
84
アーキテクチャと考える迷子にならない開発者テスト
irof
10
4.1k
技術的負債の正体を知って向き合う
irof
0
920
関ジャバと言う場
irof
0
240
型で語るカタ
irof
2
1.5k
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
450
複数アプリケーションを育てていくための共通化戦略
irof
9
5.4k
SpringBootにおけるオブザーバビリティのなにか
irof
1
1.3k
Javaアプリケーションモニタリングの基本
irof
7
2.9k
Other Decks in Programming
See All in Programming
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.3k
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
260
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
460
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
140
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
220
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
130
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
480
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
400
Codex の「自走力」を高める
yorifuji
0
1.2k
OTP を自動で入力する裏技
megabitsenmzq
0
110
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
960
Featured
See All Featured
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
100
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
How to make the Groovebox
asonas
2
2k
It's Worth the Effort
3n
188
29k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
RailsConf 2023
tenderlove
30
1.4k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
860
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
Building a Scalable Design System with Sketch
lauravandoore
463
34k
New Earth Scene 8
popppiees
1
1.7k
The Invisible Side of Design
smashingmag
302
51k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Transcript
ϓʔϧʹΏ͜͏ ؔδϟό'24 3݄ @irof h t t ps://irof.me
ϓʔϧ • ͳʹ͔ΛཷΊ͓ͯ͘ͷ • JavaͷੈքͰʮͳʹ͔ʯʹʮΦϒδΣΫτʯ • ͭ·ΓʮϓʔϧʯʹΦϒδΣΫτϓʔϧ • ཷΊͯɺ͑ΔΑ͏ʹ͍ͯ͠Δঢ়ଶ •
ϓʔϧͱ͍͏໊લʮཷΊΔʯʹओ؟͕͋Γͦ͏͕ͩɺ͏ͨΊʹཷΊΔΜͩΑͶͱ • ͳͷͰʮཷΊΔʯͦͷΑ͏ʹݟ͍͑ͯΕɺ࣮ࡍཷ·͍ͬͯͳͯ͘Α͍
ཷΊΔཧ༝ • ͏࣌ʹ࡞ΔͷͰෆ߹͕͋Δ • CPUϝϞϦΛ͏ • ͕͔͔࣌ؒΔ • ... •
ཧ͍ͨ͠ • : ଟ͗ͯ͢ࠔΔͷͱ͔ • ...
ࠓ͢ϓʔϧͨͪ
ίωΫγϣϯϓʔϧ
ίωΫγϣϯϓʔϧɺͨͱ͑ɻ • σʔλϕʔείωΫγϣϯϓʔϧ • : σʔλϕʔεͱͷଓʹ͕͔͔࣌ؒΔ • ௨৴ͷཱ֬ɺೝূɺ΄͔ • :
σʔλϕʔε͕ड͚ೖΕΒΕΔଓʹݶΓ͕͋Δ • σʔλϕʔεαʔόʔͷϦιʔεΛফඅ͢Δ • దʹղ์͠ͳ͍ͱ͍͚ͳ͍
😕
None
☺
• ࠓ͜ͷ͘Β͍ͷղ૾Ͱ͢ɻ
σʔλϕʔείωΫγϣϯϓʔϧΛ͏͜ͱͰ • ίωΫγϣϯΛ͍͍ͨͱ͖ʹίωΫγϣ ϯϓʔϧ͔ΒआΓͯ͘ΔͷͰɺଓ࣌ͷί ετΛલ͍Ͱ͖Δ • ʮΓͳ͍࣌ʹ৽ͨʹଓ͢Δʯͱ͔ ͢ΔͷͰɺৗʹલ͍͢ΔͱݶΒͳ͍ • ෳͷΫϥΠΞϯτͰίωΫγϣϯΛڞ༗
Ͱ͖Δ • ʮ100ΫϥΠΞϯτ͋Δ͔Β100ίωΫ γϣϯཁΔʯͱ͔Ͱͳ͍ • ίωΫγϣϯͷཧΛͤΒΕΔ
ίωΫγϣϯϓʔϧଞʹ • RDBͷίωΫγϣϯϓʔϧʢjavax.sql.DataSourceʣ͕Α͘ݟΔίωΫγϣϯϓʔϧͩ ͕ɺଞͷίωΫγϣϯΛϓʔϧ͢Δͷ͋Δɻͨͱ͑HTTP ClientͷίωΫγϣ ϯɻ • ୯Ұαʔόʔʹશ෦٧Ίࠐ·ͣʹωοτϫʔΫΛհͯ͠৭ʑ͢ΔͷͰɺ͋ͪͪ͜Ͱʮί ωΫγϣϯʯΛѻ͏ɻίωΫγϣϯߴίετͳͷͰɺϓʔϧ͢ΔՁ͕͋Δɻ •
ίωΫγϣϯͷͳʹ͕ߴίετ͔ʁׂѪɻ • ࣗͰ։͍ͨίωΫγϣϯΛ͏߹ͱɺϓʔϧ͞Ε͍ͯΔίωΫγϣϯΛ͏߹Ͱ ΤϥʔϋϯυϦϯάʢϦτϥΠϙϦγʔͱ͔ʣ͕ҟͳΔͱ͔ѻ͏ɻ
εϨουϓʔϧ
εϨουϓʔϧɺͨͱ͑ɻ • ϫʔΧʔεϨουϓʔϧ • ϦΫΤετΛεϨουͰࡹ͘ΞϓϦέʔγϣϯͰग़ͯ͘Δ • : εϨουͷੜʹ࣌ؒίετ͔͔Δ • :
ͨΓʹεϨουΛੜ͢ΔͱJVMͷϦιʔεΛ৯͍௵͢ • : εϨου༻࣌ʹ͏ଆ͕ҙࣝͨ͘͠ͳ͍ܾ·Γࣄ͕͋Γ͕ͪ
None
😖
None
😎
😀
ϫʔΧʔεϨουϓʔϧΛ͏͜ͱͰ • ෳͷϦΫΤετΛಉ࣌ʹࡹ͚ΔΑ͏ ʹͳΔ • Ϣʔβʔ͕1ਓͰҰʹ1ϦΫΤετ͠ ͔͛ͳ͍ͳΒશવཁΒͳ͍ • ͳΒWebΞϓϦʹ͢Δҙຯͳ͍ •
ͷΜͿΖ͖ͬΜ͙ͱ͔͍ͬͯಉ͡Ͱ ͢ɻ͏εϨου֨ஈʹҧ͏͚Ͳɻ
εϨουϓʔϧଞʹ • @AsyncͰΘΕΔඇಉظλεΫεϨου • @ScheduledͰΘΕΔεέδϡʔϥʔεϨου • ͦͷଞҙͷεϨου • εϨουΛ͏࣌εϨουϓʔϧΛ͏ •
java.util.concurrent.ExecutorService εϨουϓʔϧͱࢥͬͯྑ͍ • ݱɺϓϩμΫτͰnew Thread()͢Δ͜ͱͳ͍
ͦͷଞͷϓʔϧɺͨͱ͑ɻ • DIίϯςφ • ʮDIίϯςφʯͨ·ʹʹͳΔ͠Ԍ্͢Δ͚ͲɺಛఆίϯςΩετʹ͓͚ΔΠϯ ελϯεͷੜํ๏Λड͚͍࣋ͬͯΔɻ • : ΠϯελϯεԽʹίετ͕͔͔Δ •
ʮDBίωΫγϣϯʯΠϯελϯε • : ΠϯελϯεΛ࡞ΔͨΊͷύϥϝλ͕ࢄΔͱࠔΔ
ϓʔϧશൠʹݴ͑Δ͜ͱ • ͩͨ͠ΒͲ͢👶 • ͍ऴΘͬͨΒඞͣϓʔϧʹ͢ • ϓʔϧϓʔϧରͷϥΠϑαΠΫϧΛཧ͢Δͷ͕ϑΝΫτϦͳͲͱҧ͏ͱ͜Ζ • ͠ΕͨΓ͢Δͱϓʔϧ͙͢Γͳ͘ͳΔ •
Θ͔ΔΑ͏ʹ͓ͯ͘͠ • ೖ͍ͬͯΔͷͷʢՄมͷͷಛʹʣ
εϨουϓʔϧͰͱ͘ʹ͓͖͍ͬͯͨ͜ͱ • Θ͔ΔΑ͏ʹ͓ͯ͘͠ • ԿݸͷεϨου͕͋Δ͔ • ԿݸͷεϨου͕͍ͯ͘͠͠Δ͔ • Կ݅ͷλεΫ͕ͪड͚த͔ •
ҟৗ࣌Λߟྀ͓ͯ͘͠ • εϨου͕ࢮΜͩΒͲ͏ͳΔ͔ • JVM͕ࢮΜͩ࣌ʹॲཧதͪड͚தͷ͕Ͳ͏ͳΔ͔
ͨͱ͑ɺJDKͰͨ·ʹ͋Γ·͢ • java.net.http.HttpClientͰίωΫγϣ ϯΛϓʔϧʹฦ͠ΕΔͬͯόά • 11.0.8ҎલͬͯΔͱى͜Δ
WEBΞϓϦʹ͓͚Δ ϓʔϧͷαΠζ
None
WEBΞϓϦͱϓʔϧ • ϓʔϧͳ͠ͷੈքɺͭ·ΓΫϥΠΞϯτ͔ ΒϦΫΤετΛ͏͚͔ͯΒશ෦Δੈք؍ ͋Δ • ͕ɺJavaͳWebΞϓϦͦΜͳੈք؍Ͱ ͳ͍ • JavaͳWebΞϓϦ͍ΖΜͳϓʔϧΛ४උ
͔ͯ͠ΒʮΑͬ͠Ό͜ʔ͍ʯͬͯΓ·͢ • Javaͷʢىಈ͕ʣ͍ͱ͔ݴΘΕΔҰҼ • ىಈ࣌ͷΫϥεಡΈࠐΈClassLoaderͬͯ ϓʔϧʹΫϥεใΛ٧ΊࠐΜͰΔͱݴ͑Δ
ແݶʹ༻ҙ͓͚͍͍ͯ͠ͱ͍͏ͷͰͳ͍ • Ϧιʔε͍ͭͩͬͯ༗ݶɻΫϥΠΞϯτͱͯ͠ͷίωΫγϣϯϓʔϧαʔόʔଆ͕ड͚ೖΕΒΕΔݶ ͕͋Δ͠ɺ1ϓʔϧͰ༗͍͍ͯ͠ʹݶ͕͋ΔɻεϨουJVMͷதͷ͚ͩͲɺεϨουΛ࡞Δ͝ ͱʹϝϞϦΛ͏͔ΒɺͦΕΛߟྀͨ͠ϝϞϦઃఆ͕ඞཁɻ • ͨ͘͞ΜͷͷͷॳظԽΛʮલआΓʯ͢Δͱɺવͦͷ͚ͩىಈ͕͘ͳΔɻ • ඞཁͳ͚ͩΛ֬อͯ͠͠Ύͬͱىಈͯ͠΄͍͠ɻ •
༻ҙͨ͠ͷͷϥΠϑαΠΫϧཧ͕͍Δ • ίωΫγϣϯϓʔϧʮଓ͕༗ޮ͔ʯͷ֬ೝ͕͍Δɻஅ͞ΕͨίωΫγϣϯΛͨ͠ΒʮίωΫ γϣϯϓʔϧΛೖΕͨΒ͏·͘௨৴Ͱ͖ͳ͍͜ͱ͕૿͑ͨʂʯͱ͔ͳΓ·͢ͷͰɻϋεΩʔϐϯάΛ ͢ΔεϨου͕८ճͯͬͨ͠Γ͢ΔͷͰɺ͕ଟ͍ͱͦΕ͚ͩෛ୲ʹͳΔɻ • ͜ΕΒͷαΠζͦΕͳΓʹؔ࿈͕͋ͬͨΓͳ͔ͬͨΓʢͬͯΛ࣍ʹ͠·͢ʣ
ϓʔϧͷσϑΥϧταΠζ • SpringBootͷ߹ • TomcatͷϫʔΧʔεϨου: 200 • HikariCPͷίωΫγϣϯϓʔϧ: 10 •
10ͬͯগͳ͍ʁͱࢥ͏ํHikariCPͷ WikiʹσϑΥϧτ10ͱͯ͠Δཧ༝આ໌ ͯ͠Δ͔ΒɺҰݟ·͠ΐ͏ɻ
αΠζͷؔ࿈ • ϫʔΧʔεϨουϓʔϧͱίωΫγϣϯϓʔϧͷΛฒ͍ͯΔͷɺগͳ͘ͱ ϫʔΧʔεϨουΑΓଟ͘ͷίωΫγϣϯΛอ͍࣋ͯͯ͠·ͣΘΕͳ͍͔Βɻ • ΞϓϦͷ࡞ΓʹΑͬͯΘΕΔ • ͲΜͳ࡞Γͨ͠ΒʮϫʔΧʔεϨουҎ্ͷίωΫγϣϯΛ͏͔ʯ͓ͬͯ͘ ͱྑ͍
ڞ༗σʔλϕʔεͱσʔλϕʔείωΫγϣϯϓʔϧ
୯ҰΞϓϦέʔγϣϯͰαʔόʔෳ͕͋ͨΓ·͑ • ΞϓϦέʔγϣϯαʔόʔ͕ϦΫΤετΛ ·͕ͨͬͨঢ়ଶΛ࣋ͭͱʮͳΜͰͦΜͳ࡞ ΓʹͳͬͯΔΜͩʁʯͱݴΘΕ͔Ͷͳ͍ɻ • ίϯςφͷޙԡ͋ͬͯ͠ɺΞϓϦέʔ γϣϯαʔόʔͷΑΓՄมʹͳ͍ͬͯ Δɻ •
ੲͷ͏ɺҰ߸ػɺೋ߸ػͱ͍͏;͏ ʹαʔόʔΛݺΜͰ͍ͨΜ͡Ό👴 • ແఀࢭσϓϩΠͱ͔͢Δͱ͞Βʹഒʹ ͳͬͨΓ͢ΔɻΠϯϓϨʔεͳϩʔϦϯά Ͱ࠷1૿͑Δɻ
ڞ༗σʔλϕʔεͰͷίωΫγϣϯࢉ • ಄ͷਤɻ2ΞϓϦέʔγϣϯͰ20ʁ • ΞϓϦ͝ͱʹ10ଓɺͦΕ͕2Πϯελϯ εɻ͜͜ʹσϓϩΠ͕ॏͳͬͨΒ2ഒɻͦΕ ͕2ΞϓϦͳͷͰɺMAX80ʹͳΔɻ • 80͘Β͍ͳΒʹͳΒͳ͍͚Ͳɺ1ΞϓϦέʔ γϣϯ͋ͨΓͷσʔλϕʔείωΫγϣϯϓʔ
ϧ͕10ͰΓΔઃܭ͕Ͱ͖͍ͯΔ͔ʹ͔͔Δɻ Ͱ͖͍ͯͳ͍ͳΒ૿͟͞ΔΛಘͳ͍ɻ • 1ΞϓϦ100ʹͨ͠Β800ͩͶ⭐ • ڞ༗σʔλϕʔεͳઃܭΛ͢Δੈք؍Ͱɺ2Ξ ϓϦͳΜ͔Ͱޮ͔ͳ͍Ͱ͠ΐ͏ɻ
ॳظαΠζͷ • ϫʔΧʔεϨουʢTomcatʣ • Initial: 10, Max: 200 • ίωΫγϣϯϓʔϧʢHikariCPʣ
• Initial: 10, Max: 10 • ϓʔϧ͢Δͷίετ͕ߴ͍ɻ֬อ ͓ͯ͘͠ʁ΄Μͱʁ֦ு͢ΔͳΒɺͦ ͷίετΛ୭ʹෛΘͤΔʁϋζϨҾ͍ ͨϢʔβʁʁ
͓·͚
None
None