PHPer向けWebアプリケーションのパフォーマンスチューニング入門 / web performance tuning

835ec1b8609b2f0dd90d6f1fe03daa14?s=47 yugo
July 14, 2018

PHPer向けWebアプリケーションのパフォーマンスチューニング入門 / web performance tuning

PHPカンファレンス関西2018で発表した登壇資料です。

835ec1b8609b2f0dd90d6f1fe03daa14?s=128

yugo

July 14, 2018
Tweet

Transcript

  1. 8.

    ෛՙࢼݧʹ͍ͭͯ ෛՙࢼݧͰ͸ԿΛ͢Δ΂͖͔ʁ • ໨ඪੑೳͷઃఆ MUST • ݱߦͷγεςϜߏ੒Ͱ໨ඪੑೳΛୡ੒Ͱ͖Δ͔ͷ֬ೝ(=໨ඪੑ) MUST • ݱߦͷγεςϜߏ੒Λεέʔϧͤ͞Δͱੑೳ΋εέʔϧ͢Δ͔ͷ֬ೝ(=εέʔϧੑ)

    MUST • γεςϜͷੑೳ͕Ͳ͜·Ͱεέʔϧ͢Δ͔ͷ֬ೝ(=ݶքੑ) SHOULD • ௕ظؒՔಇͨ͜͠ͱʹΑΔσʔλɺϩάͷ஝ੵͳͲʹΑͬͯੑೳʹ໰୊͕Ͱͳ͍͔ͷ֬ೝ(=଱ٱੑ) SHOULD
  2. 15.

    ෛՙࢼݧͷ४උ • ෛՙࢼݧ؀ڥ • ΞϓϦέʔγϣϯ • ֎෦γεςϜ΁ͷґଘ෦෼ͷελϒԽ • ߈ܸπʔϧ(JMeterͳͲ) •

    ߈ܸΠϯελϯεͷ४උ • ߈ܸγφϦΦͷ࡞੒ ඞཁͳ΋ͷ • γφϦΦ༻σʔλ४උ • ϞχλϦϯάπʔϧ (XHGui,NewRelic,ganglia…) • ܭଌπʔϧ (top,vmstat,iostat,sar,netstat…) • ΞΫηεϩάαϚϦπʔϧ (kataribeɺࣗ࡞πʔϧ) • ϓϩϑΝΠϥʔ (XHProf,tideways,blaclfire…) Ҋ֎४උʹ͕͔͔࣌ؒΔͷͰܭըతʹ…ʂ
  3. 16.

    ߈ܸπʔϧͷબఆ ߈ܸπʔϧ͸ҎԼΛຬ͍ͨͯ͠Δඞཁ͕͋Δ • ϦΫΤετͷγϡϛϨʔγϣϯ - γφϦΦΛઃఆ࣮ͯ͠ࡍͷϫʔΫϩʔυʹ͍ۙෛՙΛ͔͚Δ͜ͱ͕Ͱ͖Δ - ϦΫΤετύϥϝʔλʔΛಈతʹઃఆͰ͖Δ • γφϦΦͷ੒ޭͷ൑ఆ৚݅ͷઃఆ͕Մೳ

    - Ϩεϙϯεʹ˓˓ؚ͕·Ε͍ͯͳ͔ͬͨΒfailɺHTTPͷεςʔλείʔυ͕5XXܥͳΒfail • ෛՙϨϕϧͷௐ੔͕Մೳ - ߈ܸπʔϧଆͷೳྗ͕଍Γͳͯ͘े෼ͳෛՙΛ༩͑ΒΕͳ͍ͱ͍͏ͷ͸͋Γ͕ͪ • ର৅ͷγεςϜͷωοτϫʔΫతʹ͍ۙͱ͜Ζ͔ΒෛՙΛ༩͑Δࣄ͕Ͱ͖Δ - ωοτϫʔΫϨΠςϯγ͕ߴ͍ͱɺର৅γεςϜʹෛՙ͕͏·͔͔͘Βͳ͍ - ωοτϫʔΫͷঢ়گʹΑΓ݁Ռ͕҆ఆ͠ͳ͍
  4. 17.

    ෛՙࢼݧͷਐΊํ ϘτϧωοΫ͸͍ΖΜͳͱ͜ΖͰൃੜ͢Δ • Πϯϑϥͷߏ੒ʹ໰୊͕͋Δ • OSͷઃఆʹ໰୊͕͋Δ • webαʔόʔͷઃఆʹ໰୊͕͋Δ(KeepAliveɺϫʔΧʔ਺ɺBacklog…) • PHPͷઃఆʹ໰୊͕͋Δ(APCuɺOPCache…)

    • ΞϓϦέʔγϣϯͷϑϨʔϜϫʔΫͷઃఆɺར༻ํ๏ʹ໰୊͕͋Δ(debug mode) • ΞϓϦέʔγϣϯϩδοΫʹ໰୊͕͋Δ(N+1ɺDB઀ଓํ๏ɺඇޮ཰ͳॲཧ) • DBαʔόʔͷઃఆʹ໰୊͕͋Δ(Index, buffer pool size…)
  5. 18.

    ෛՙࢼݧͷਐΊํ Ұؾʹશ෦Λର৅ʹ͢ΔͱԿ͕ͳΜ͔ͩΘ͔Βͳ͘ͳͬͯ͠·͏! ஫ ҙ ϘτϧωοΫ͸͍ΖΜͳͱ͜ΖͰൃੜ͢Δ • Πϯϑϥͷߏ੒ʹ໰୊͕͋Δ • OSͷઃఆʹ໰୊͕͋Δ •

    webαʔόʔͷઃఆʹ໰୊͕͋Δ(KeepAliveɺϫʔΧʔ਺ɺBacklog…) • PHPͷઃఆʹ໰୊͕͋Δ(APCuɺOPCache…) • ΞϓϦέʔγϣϯͷϑϨʔϜϫʔΫͷઃఆɺར༻ํ๏ʹ໰୊͕͋Δ(debug mode) • ΞϓϦέʔγϣϯϩδοΫʹ໰୊͕͋Δ(N+1ɺDB઀ଓํ๏ɺඇޮ཰ͳॲཧ) • DBαʔόʔͷઃఆʹ໰୊͕͋Δ(Index, buffer pool size…)
  6. 26.

    ϨΠςϯγͷఆٛ •Response timeͱService Time͸۠ผ͢Δ •Service time͸ॲཧʹ͔͔ͬͨ࣌ؒ •Response time͸ΩϡʔͰͷ଴ͪ࣌ؒ΋ؚΊΔ -ύέοτͷ଴ͪߦྻ -CPUͷϥϯΩϡʔͷ଴ͪߦྻ

    -ApacheͷListen backlogͷ଴ͪߦྻ -I/Oͷ଴ͪߦྻ •؍ଌऀ͕୭͔ʹ஫ҙ ΫϥΠΞϯτ͔ΒΈͨϨεϙϯελΠϜ͸஗͍͕WebαʔόʔͷΞΫηεϩά্తʹ͸஗ ͘ͳ͍৔߹ɺWebαʔόʔͰͷ଴ͪ࣌ؒʹ͕͔͔͍࣌ؒͬͯΔɺͳͲ
  7. 31.

    USE Method •Utilization Saturation and Errors (USE) Method By Brendan

    Gregg •֤Ϧιʔεͷ࢖༻཰ɺ๞࿨ɺΤϥʔʹ͍ͭͯண໨͢Δ •୅දతͳϦιʔε CPU ϝϞϦʔ σΟεΫ ωοτϫʔΫ ͳͲ Mutex File Descriptors ͳͲ ෺ཧϦιʔε ιϑτ΢ΣΞϦιʔε
  8. 32.

    PHPͷ࣮ߦΞʔΩςΫνϟΛҙࣝ͢Δ • Shared Nothing Architecture • ϦΫΤετຖʹ༷ʑͳ৘ใ͕ຖճॳظԽ͞ΕɺϦΫΤετಉ࢜ͷॲཧ͕͓ޓ͍ʹಠཱ͍ͯ͠Δ • લͷϦΫΤετͷॲཧ͕࣍ͷϦΫΤετʹӨڹΛ༩͑ͳ͍ •

    ϦΫΤετຖʹϝϞϦղ์͢ΔͷͰϝϞϦϦʔΫͳͲͷ৺഑͕গͳ͍ • ঢ়ଶΛ͍࣋ͬͯͳ͍ͷͰεέʔϧΞ΢τΛ͠΍͍͢ɻεέʔϧΞ΢τͨ࣌͠ʹϦχΞʹ ύϑΥʔϚϯε্͕͕Γ΍͍͢ɻ • ϦΫΤετॲཧຖͷΦʔόʔϔου͕େ͖͍ • ϦΫΤετΛ·͍ͨͩ৘ใͷอ͕࣋Ͱ͖ͳ͍(APCuͳͲΛར༻͠ͳ͍ͱ͍͚ͳ͍) ϝϦοτ σϝϦοτ
  9. 34.
  10. 36.
  11. 38.