োʹͯ͢Δͱ͜Ζͳ͠αΠϘζגࣜձࣾ @yokotaso
View Slide
We’re sorry for …
ӡ༻োͷ• ͝໎Λ͓͔͚ͨ͠Έͳ͞· ͝ΊΜͳ͍͞• ࢹɾରࡦɾௐࠪɾվળΛʑੋվળ• վળ·ͩ·ͩಓ• αΠϘζΛӬ͘ΑΖ͓͘͠ئ͍͠·͢
ΫϥυͷنͱՔಇ• ͝ܖ͍͍͍ͨͩͯΔձ༷ࣾ 1ສ8ઍࣾ
ӡ༻ো
Boo!
ͦΜͳ͜ͱͳ͍
ŧŔŕŪGOOD
ࣦഊ͔ΒపఈతʹֶͿোֶश4
جૅࣝΛ͚ͭΔ
جૅతͳૉཆΛຏ͘ίϯϐϡʔλͷجૅΛΖ͏
ੜ͖ͨσʔλ͕োʹ͋Δ• ϘτϧωοΫͲ͜ʁ• େنαʔϏεٕज़ೖΛ ࢀর͠ͳ͕Βௐࠪ͢ΔͱษڧʹͳΔ• ϝτϦΫεࢹπʔϧͰ؍͠Α͏• جૅతͳࣝಎ͕ োௐࠪͷͨͼʹຏ͔ΕΔ
ࣝͱܦݧཌྷΛत͚ͯ͘ΕΔ• ະͷʹग़ձͬͨΒཱͪฦΔॴ• ͍͠΄Ͳղܾͷࢳޱʹ• ҰਓͰௐࠪΛਐΊΒΕΔΑ͏ʹͳͬͨ• ϝτϦΫε͔ΒݪҼΛ༧Ͱ͖ΔΑ͏ʹ
ίϯϐϡʔλʔͷେࣄͳࣄো͕ڭ͑ͯ͘Εͨ
ࣝΛਂ۷Γ͢Δ
ಈ࡞ݪཧΛਂ͘ཧղ͢Δো࠷ߴͷྑͰ͋Δ
MySQLͷΠϯσοΫε͕͑ͳ͍
খ͞ͳෆ۩߹վम͕ݪҼ• ॏෳআڈͷͨΊʹGROUP BY Λ҆қʹ͚ͭͨͷ͕ݪҼ• JOIN࣌ʹར༻ͨ͠ΠϯσοΫε͕GROUP BY ʹ࠶ར༻Ͱ͖ͳ͍• େྔͷϨίʔυʹରͯ͠filesort͕ͬͯྦ
ཧղͨͭ͠Γʹͳͬͯ·ͤΜ͔• োͷͨͼʹجຊతͳಈ࡞ݪཧΛ֬ೝ• োௐࠪΛ௨ͯ͠ಈ࡞ݪཧͷཧղ͕ਂ·Δ• ಈ࡞ݪཧ͕ਂ͘ཧղͰ͖͍ͯͳ͍ؾ͖ͮ
ো࠷ߴͷྑͰ͋Δ
νʔϜͰڧ͘ͳΔ
ࣦഊΛΏΔ͢จԽࣦഊͷڞ༗ஏ͕ͩʹཱͭʂ
Seasar2 S2DAO Ҡߦࣦഊ
͝ΊΜͳ͍͞!͝ΊΜͳ͍͞!• SeasarͷEOLʹ͏Spring FrameworkҠߦ• Seasar S2DAO͔ΒHibernateͷҠߦࣦഊ• ύϑΥʔϚϯεྼԽɺOutOfMemoryError…• શഊͰ͢ɻ͝໎Λ͓͔͚͠·ͨ͠
ࣦഊΛड͚ೖΕΔจԽ
PostmortemΛॻ͜͏• Λ٬؍తʹཧ͢ΔͨΊʹ༗༻• ࣦഊΛੳɾڞ༗ɾࢭ• AWS S3 େنো• git lab ຊ൪σʔλআ
ࣦഊΛڞ༗Ͱ͖ΔจԽΛ࡞Δ• ࣦഊΛڞ༗ͯ͠܁Γฦ͞ͳ͍จԽΛ࡞Ζ͏• ࣦഊʹ͍ͭͯޠΔਓͷଘࡏҙٛେ͖͍• ࣦഊΛڞ༗ͯ͘͠ΕΔਓʹѹతײँ• ݠڏɾଚܟɾ৴པ(HRT) ΛԿ֬ೝ͠Α͏• ݸਓͷࣦഊͰͳ͍ɺ৫ͷࣦഊͩ
ࣦഊޭͷதؒͰ͔͠ͳ͍
సΜͰͨͩͰى͖͕͋Βͳ͍ʂ• ࣦഊͷչ͕͠͞վળʹͭͳ͕Δ• S2Dao͔ΒHibernateͷҠߦࣦഊΛ׆͔ͯ͠• JDBCTemplateΛར༻ͯ͠࠶ઃܭ• OSSͱͯ͠ެ։༧ఆ
ࣦഊͷڞ༗ஏ͕ͩʹཱͭʂ
Α͜͠·ͳੜ͖ํ
ͣͿͱ͘ੜ͖Δੜ͖͍ͯΔ͚ͩͰ·Δ͏͚
Java ṖͷύϑΥʔϚϯεྼԽ
ղܾ͠·ͨ͠ (๑•̀ŷ•́)و✧• JIT Compiler͕ఀࢭ͢Δέʔε͕͋Δ• JVM͕JIT Compileͨ͠ίʔυΛࣺͯΔ• JIT Compiler͕෮ؼͤͣɺ࠷దԽͷ͔͔Βͳ͍ Byte CodeΛJava͕࣮ߦ͠ଓ͚Δ• ύϑΥʔϚϯεྼԽΛى͜͢
ղܾͷࢳޱ• GCʹׂΓͯΔThread CPU͔Βܾ·Δ• GCʹׂΓͯΒΕͨThread CPUΛ100%ઐ༗͢Δ
ղܾͷࢳޱ• GCʹΑΔCPUར༻Λߟྀͯ͠༨༟͕͋Δ• Full GCൃੜ͍ͯ͠ͳ͍• GCΛݪҼ͔Βഉআ• CPUෛՙ্͕͕ΔέʔεΛMLͰಡΈ͋͞Δ
ϒϩάʹެ։
͝Ѫಡ͋Γ͕ͱ͏͍͟͝·͢ʂ• ͜ͷهࣄ͚ͩͰ 1ສ5ઍPV• ࠷ऴతʹ 700ͯϒ͘Β͍• OSS͓ੈʹͳΓͬͺͳ͠• ใެ։Ͱߩݙ͍ͨ͠ؾ࣋ͪ
ͣͿͱ͘ੜ͖ΔΑ͏ʹ• ໘ന͍ٕज़هࣄʹͳͬͨΒṶ͚ͷ• ໘ന͍ࣄ͋ͬͨΒ͍͍ͳ͕ϞνϕʔγϣϯʹมԽ• ࠶ىಈͰճආͭͭ͠ظؒɺো͕ൃੜ͍ͯͨ͠• Θ͔Βͳ͍͍ͯ͘ɾಀ͍͍͛ͯ• ੜ͖͍ͯΔ͚ͩͰ·Δ͏͚ͷਫ਼ਆ
ௐΔ͚ͩͰ·Δ͏͚ʂ
োֶशɺ͔ͲΓ·͔ͬ
োʹͯ͢Δͱ͜Ζͳ͠