Slide 1

Slide 1 text

ϓʔϧʹΏ͜͏ ؔδϟό'24 3݄౓ @irof h t t ps://irof.me

Slide 2

Slide 2 text

ϓʔϧ • ͳʹ͔ΛཷΊ͓ͯ͘΋ͷ • JavaͷੈքͰ͸ʮͳʹ͔ʯʹʮΦϒδΣΫτʯ • ͭ·ΓʮϓʔϧʯʹΦϒδΣΫτϓʔϧ • ཷΊͯɺ࢖͑ΔΑ͏ʹ͍ͯ͠Δঢ়ଶ • ϓʔϧͱ͍͏໊લ͸ʮཷΊΔʯʹओ؟͕͋Γͦ͏͕ͩɺ࢖͏ͨΊʹཷΊΔΜͩΑͶͱ • ͳͷͰʮཷΊΔʯ͸ͦͷΑ͏ʹݟ͍͑ͯΕ͹ɺ࣮ࡍཷ·͍ͬͯͳͯ͘΋Α͍

Slide 3

Slide 3 text

ཷΊΔཧ༝ • ࢖͏࣌ʹ࡞ΔͷͰ͸ෆ౎߹͕͋Δ • CPU΍ϝϞϦΛ࢖͏ • ͕͔͔࣌ؒΔ • ... • ؅ཧ͍ͨ͠ • ਺: ଟ͗ͯ͢ࠔΔ΋ͷͱ͔ • ...

Slide 4

Slide 4 text

ࠓ೔࿩͢ϓʔϧͨͪ

Slide 5

Slide 5 text

ίωΫγϣϯϓʔϧ

Slide 6

Slide 6 text

ίωΫγϣϯϓʔϧɺͨͱ͑͹ɻ • σʔλϕʔείωΫγϣϯϓʔϧ • ໰୊: σʔλϕʔεͱͷ઀ଓʹ͸͕͔͔࣌ؒΔ • ௨৴ͷཱ֬ɺೝূɺ΄͔ • ໰୊: σʔλϕʔε͕ड͚ೖΕΒΕΔ઀ଓ਺ʹ͸ݶΓ͕͋Δ • σʔλϕʔεαʔόʔͷϦιʔεΛফඅ͢Δ • ద੾ʹղ์͠ͳ͍ͱ͍͚ͳ͍

Slide 7

Slide 7 text

😕

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Slide 10

Slide 10 text

• ࠓ೔͸͜ͷ͘Β͍ͷղ૾౓Ͱ͢ɻ

Slide 11

Slide 11 text

σʔλϕʔείωΫγϣϯϓʔϧΛ࢖͏͜ͱͰ • ίωΫγϣϯΛ࢖͍͍ͨͱ͖ʹίωΫγϣ ϯϓʔϧ͔ΒआΓͯ͘ΔͷͰɺ઀ଓ࣌ͷί ετΛલ෷͍Ͱ͖Δ • ʮ଍Γͳ͍࣌ʹ৽ͨʹ઀ଓ͢Δʯͱ͔΋ ͢ΔͷͰɺৗʹલ෷͍͢Δͱ΋ݶΒͳ͍ • ෳ਺ͷΫϥΠΞϯτͰίωΫγϣϯΛڞ༗ Ͱ͖Δ • ʮ100ΫϥΠΞϯτ͋Δ͔Β100ίωΫ γϣϯཁΔʯͱ͔Ͱ͸ͳ͍ • ίωΫγϣϯͷ؅ཧΛ೚ͤΒΕΔ

Slide 12

Slide 12 text

ίωΫγϣϯϓʔϧଞʹ΋ • RDBͷίωΫγϣϯϓʔϧʢjavax.sql.DataSourceʣ͕Α͘ݟΔίωΫγϣϯϓʔϧͩ ͕ɺଞͷίωΫγϣϯΛϓʔϧ͢Δ΋ͷ΋͋Δɻͨͱ͑͹HTTP ClientͷίωΫγϣ ϯɻ • ୯Ұαʔόʔʹશ෦٧Ίࠐ·ͣʹωοτϫʔΫΛհͯ͠৭ʑ͢ΔͷͰɺ͋ͪͪ͜Ͱʮί ωΫγϣϯʯΛѻ͏ɻίωΫγϣϯ͸ߴίετͳͷͰɺϓʔϧ͢ΔՁ஋͕͋Δɻ • ίωΫγϣϯͷͳʹ͕ߴίετ͔ʁ͸ׂѪɻ • ࣗ෼Ͱ։͍ͨίωΫγϣϯΛ࢖͏৔߹ͱɺϓʔϧ͞Ε͍ͯΔίωΫγϣϯΛ࢖͏৔߹Ͱ ΤϥʔϋϯυϦϯάʢϦτϥΠϙϦγʔͱ͔ʣ͕ҟͳΔͱ͔΋ѻ͏ɻ

Slide 13

Slide 13 text

εϨουϓʔϧ

Slide 14

Slide 14 text

εϨουϓʔϧɺͨͱ͑͹ɻ • ϫʔΧʔεϨουϓʔϧ • ϦΫΤετΛεϨουͰࡹ͘ΞϓϦέʔγϣϯͰग़ͯ͘Δ • ໰୊: εϨουͷੜ੒ʹ͸࣌ؒ΋ίετ΋͔͔Δ • ໰୊: ৔౰ͨΓʹεϨουΛੜ੒͢ΔͱJVMͷϦιʔεΛ৯͍௵͢ • ໰୊: εϨου࢖༻࣌ʹ͸࢖͏ଆ͕ҙࣝͨ͘͠ͳ͍ܾ·Γࣄ͕͋Γ͕ͪ

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

😖

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

😎

Slide 19

Slide 19 text

😀

Slide 20

Slide 20 text

ϫʔΧʔεϨουϓʔϧΛ࢖͏͜ͱͰ • ෳ਺ͷϦΫΤετΛಉ࣌ʹࡹ͚ΔΑ͏ ʹͳΔ • Ϣʔβʔ͕1ਓͰҰ౓ʹ1ϦΫΤετ͠ ͔౤͛ͳ͍ͳΒશવཁΒͳ͍ • ͳΒWebΞϓϦʹ͢Δҙຯͳ͍ • ͷΜͿΖ͖ͬΜ͙ͱ͔͍ͬͯ΋ಉ͡Ͱ ͢ɻ࢖͏εϨου਺֨ஈʹҧ͏͚Ͳɻ

Slide 21

Slide 21 text

εϨουϓʔϧଞʹ΋ • @AsyncͰ࢖ΘΕΔඇಉظλεΫεϨου • @ScheduledͰ࢖ΘΕΔεέδϡʔϥʔεϨου • ͦͷଞ೚ҙͷεϨου • εϨουΛ࢖͏࣌͸εϨουϓʔϧΛ࢖͏ • java.util.concurrent.ExecutorService ͸εϨουϓʔϧͱࢥͬͯྑ͍ • ݱ୅ɺϓϩμΫτͰnew Thread()͢Δ͜ͱ͸ͳ͍

Slide 22

Slide 22 text

ͦͷଞͷϓʔϧɺͨͱ͑͹ɻ • DIίϯςφ • ʮDIίϯςφʯ͸ͨ·ʹ࿩୊ʹͳΔ͠Ԍ্͢Δ͚ͲɺಛఆίϯςΩετʹ͓͚ΔΠϯ ελϯεͷੜ੒ํ๏Λड͚͍࣋ͬͯΔɻ • ໰୊: ΠϯελϯεԽʹ͸ίετ͕͔͔Δ • ʮDBίωΫγϣϯʯ΋Πϯελϯε • ໰୊: ΠϯελϯεΛ࡞ΔͨΊͷύϥϝλ͕ࢄΔͱࠔΔ

Slide 23

Slide 23 text

ϓʔϧશൠʹݴ͑Δ͜ͱ • ͩͨ͠Β΋Ͳ͢👶 • ࢖͍ऴΘͬͨΒඞͣϓʔϧʹ໭͢ • ϓʔϧ͸ϓʔϧର৅ͷϥΠϑαΠΫϧΛ؅ཧ͢Δͷ͕ϑΝΫτϦͳͲͱҧ͏ͱ͜Ζ • ໭͠๨ΕͨΓ͢Δͱϓʔϧ͸͙͢଍Γͳ͘ͳΔ • Θ͔ΔΑ͏ʹ͓ͯ͘͠ • ೖ͍ͬͯΔ΋ͷͷ਺ʢՄมͷ΋ͷ͸ಛʹʣ

Slide 24

Slide 24 text

εϨουϓʔϧͰͱ͘ʹ΍͓͖͍ͬͯͨ͜ͱ • Θ͔ΔΑ͏ʹ͓ͯ͘͠ • ԿݸͷεϨου͕͋Δ͔ • ԿݸͷεϨου͕๩͍ͯ͘͠͠Δ͔ • Կ݅ͷλεΫ͕଴ͪड͚த͔ • ҟৗ࣌Λߟྀ͓ͯ͘͠ • εϨου͕ࢮΜͩΒͲ͏ͳΔ͔ • JVM͕ࢮΜͩ࣌ʹॲཧத΍଴ͪड͚தͷ͕Ͳ͏ͳΔ͔

Slide 25

Slide 25 text

ͨͱ͑͹ɺJDKͰ΋ͨ·ʹ͋Γ·͢ • java.net.http.HttpClientͰίωΫγϣ ϯΛϓʔϧʹฦ͠๨ΕΔͬͯόά • 11.0.8Ҏલ࢖ͬͯΔͱى͜Δ

Slide 26

Slide 26 text

WEBΞϓϦʹ͓͚Δ ϓʔϧͷαΠζ

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

WEBΞϓϦͱϓʔϧ • ϓʔϧͳ͠ͷੈքɺͭ·ΓΫϥΠΞϯτ͔ ΒϦΫΤετΛ͏͚͔ͯΒશ෦΍Δੈք؍ ΋͋Δ • ͕ɺJavaͳWebΞϓϦ͸ͦΜͳੈք؍Ͱ͸ ͳ͍ • JavaͳWebΞϓϦ͸͍ΖΜͳϓʔϧΛ४උ ͔ͯ͠ΒʮΑͬ͠Ό͜ʔ͍ʯͬͯ΍Γ·͢ • Javaͷʢىಈ͕ʣ஗͍ͱ͔ݴΘΕΔҰҼ • ىಈ࣌ͷΫϥεಡΈࠐΈ΋ClassLoaderͬͯ ϓʔϧʹΫϥε৘ใΛ٧ΊࠐΜͰΔͱݴ͑Δ

Slide 29

Slide 29 text

ແݶʹ༻ҙ͓͚ͯ͠͹͍͍ͱ͍͏΋ͷͰ͸ͳ͍ • Ϧιʔε͸͍ͭͩͬͯ༗ݶɻΫϥΠΞϯτͱͯ͠ͷίωΫγϣϯϓʔϧ͸αʔόʔଆ͕ड͚ೖΕΒΕΔݶ౓ ͕͋Δ͠ɺ1ϓʔϧͰ઎༗͍͍ͯ͠਺ʹ΋ݶ౓͕͋ΔɻεϨου͸JVMͷதͷ࿩͚ͩͲɺεϨουΛ࡞Δ͝ ͱʹϝϞϦΛ࢖͏͔ΒɺͦΕΛߟྀͨ͠ϝϞϦઃఆ͕ඞཁɻ • ͨ͘͞Μͷ΋ͷͷॳظԽΛʮલआΓʯ͢Δͱɺ౰વͦͷ෼͚ͩىಈ͕஗͘ͳΔɻ • ඞཁͳ͚ͩΛ֬อͯ͠͠Ύͬͱىಈͯ͠΄͍͠ɻ • ༻ҙͨ͠΋ͷͷϥΠϑαΠΫϧ؅ཧ͕͍Δ • ίωΫγϣϯϓʔϧ͸ʮ઀ଓ͕༗ޮ͔ʯͷ֬ೝ͕͍Δɻ੾அ͞ΕͨίωΫγϣϯΛ౉ͨ͠ΒʮίωΫ γϣϯϓʔϧΛೖΕͨΒ͏·͘௨৴Ͱ͖ͳ͍͜ͱ͕૿͑ͨʂʯͱ͔ͳΓ·͢ͷͰɻϋ΢εΩʔϐϯάΛ ͢ΔεϨου͕८ճͯ͠΍ͬͨΓ͢ΔͷͰɺ਺͕ଟ͍ͱͦΕ͚ͩෛ୲ʹͳΔɻ • ͜ΕΒͷαΠζ͸ͦΕͳΓʹؔ࿈͕͋ͬͨΓͳ͔ͬͨΓʢͬͯ࿩Λ࣍ʹ͠·͢ʣ

Slide 30

Slide 30 text

ϓʔϧͷσϑΥϧταΠζ • SpringBootͷ৔߹ • TomcatͷϫʔΧʔεϨου: 200 • HikariCPͷίωΫγϣϯϓʔϧ: 10 • 10ͬͯগͳ͍ʁͱࢥ͏ํ͸HikariCPͷ WikiʹσϑΥϧτ10ͱͯ͠Δཧ༝આ໌ ͯ͠Δ͔ΒɺҰ౓ݟ·͠ΐ͏ɻ

Slide 31

Slide 31 text

αΠζͷؔ࿈ • ϫʔΧʔεϨουϓʔϧͱίωΫγϣϯϓʔϧͷ਺஋Λฒ΂͍ͯΔͷ͸ɺগͳ͘ͱ΋ ϫʔΧʔεϨουΑΓ΋ଟ͘ͷίωΫγϣϯΛอ͍࣋ͯͯ͠΋·ͣ࢖ΘΕͳ͍͔Βɻ • ΞϓϦͷ࡞ΓʹΑͬͯ͸࢖ΘΕΔ • ͲΜͳ࡞Γͨ͠ΒʮϫʔΧʔεϨου਺Ҏ্ͷίωΫγϣϯΛ࢖͏͔ʯ͸஌͓ͬͯ͘ ͱྑ͍

Slide 32

Slide 32 text

ڞ༗σʔλϕʔεͱσʔλϕʔείωΫγϣϯϓʔϧ

Slide 33

Slide 33 text

୯ҰΞϓϦέʔγϣϯͰ΋αʔόʔ͸ෳ਺͕͋ͨΓ·͑ • ΞϓϦέʔγϣϯαʔόʔ͕ϦΫΤετΛ ·͕ͨͬͨঢ়ଶΛ࣋ͭͱʮͳΜͰͦΜͳ࡞ ΓʹͳͬͯΔΜͩʁʯͱݴΘΕ͔Ͷͳ͍ɻ • ίϯςφͷޙԡ͠΋͋ͬͯɺΞϓϦέʔ γϣϯαʔόʔͷ਺͸ΑΓՄมʹͳ͍ͬͯ Δɻ • ੲ͸ͷ͏ɺҰ߸ػɺೋ߸ػͱ͍͏;͏ ʹαʔόʔΛݺΜͰ͍ͨΜ͡Ό👴 • ແఀࢭσϓϩΠͱ͔͢Δͱ͞Βʹഒʹ ͳͬͨΓ͢ΔɻΠϯϓϨʔεͳϩʔϦϯά Ͱ΋࠷௿1୆͸૿͑Δɻ

Slide 34

Slide 34 text

ڞ༗σʔλϕʔεͰͷίωΫγϣϯࢉ • ๯಄ͷਤɻ2ΞϓϦέʔγϣϯͰ20ʁ • ΞϓϦ͝ͱʹ10઀ଓɺͦΕ͕2Πϯελϯ εɻ͜͜ʹσϓϩΠ͕ॏͳͬͨΒ2ഒɻͦΕ ͕2ΞϓϦͳͷͰɺMAX80ʹͳΔɻ • 80͘Β͍ͳΒ໰୊ʹͳΒͳ͍͚Ͳɺ1ΞϓϦέʔ γϣϯ͋ͨΓͷσʔλϕʔείωΫγϣϯϓʔ ϧ͕10Ͱ଍ΓΔઃܭ͕Ͱ͖͍ͯΔ͔ʹ͔͔Δɻ Ͱ͖͍ͯͳ͍ͳΒ૿΍͟͞ΔΛಘͳ͍ɻ • 1ΞϓϦ100ʹͨ͠Β800ͩͶ⭐ • ڞ༗σʔλϕʔεͳઃܭΛ͢Δੈք؍Ͱ͸ɺ2Ξ ϓϦͳΜ͔Ͱ͸ޮ͔ͳ͍Ͱ͠ΐ͏ɻ

Slide 35

Slide 35 text

ॳظαΠζͷ࿩ • ϫʔΧʔεϨουʢTomcatʣ • Initial: 10, Max: 200 • ίωΫγϣϯϓʔϧʢHikariCPʣ • Initial: 10, Max: 10 • ϓʔϧ͢Δ΋ͷ͸ίετ͕ߴ͍ɻ֬อ ͓ͯ͘͠ʁ΄Μͱʁ֦ு͢ΔͳΒɺͦ ͷίετΛ୭ʹෛΘͤΔʁϋζϨҾ͍ ͨϢʔβʁʁ

Slide 36

Slide 36 text

͓·͚

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

No content