Java Night Seminar : Java Troubleshooting

Java Night Seminar : Java Troubleshooting

タイトル: 「2時間集中 Javaトラブル解決ドリル」

概 要 : Javaプログラミングを覚えたけれど (1)トラブルではまっ
      てしまった、(2)急な対応を迫られたが対応しきれない、
      (3)トラブルを自力で解決できない。などなど様々なJava
      トラブルでお悩みの方向けの2時間の集中ドリルです。
      本セッションではデバッグやテスト、ツールの紹介だけに
      とどまらず、クイズやQ&Aを交えながらトラブル解決を参加
      型形式で学んでいただきます。
      
      次世代を担う若いJavaエンジニアの皆様の参加をお待ちして
      います。(若いと思う!方もお待ちしております)

講 師 : サン・マイクロシステムズ(株)
      Javaエバンジェリスト 岡崎 隆之 氏

講師紹介: Javaコンサルタントとして金融システムを中心に、製造、ユ
      ーティリティ、旅行業など幅広い基幹システムのアーキテク
      チャ設計、実装。また平行してパフォーマンスチューニング
      やトラブルシューティングといったコンサルティングも実施。
      JavaOne Tokyo 2005、Google Developer Seminar 2006など
      数々のセミナーで講演。

759f46b226f3fc59661883355503a874?s=128

Takayuki Okazaki

March 27, 2007
Tweet

Transcript

  1. ̎࣌ؒूத JavaTM τϥϒϧղܾυϦϧ Ԭོ࡚೭ ιϑτ΢ΤΞɾϏδωε౷ׅຊ෦ Java ΤόϯδΣϦετ http://blogs.sun.com/okazaki

  2. Copyright © 2007 Sun Microsystems K.K. 2 ηογϣϯ֓ཁ ͳ͔ͥτϥϒϧʹ·ͭΘΔҳ࿩͸਎ ͷճΓʹ͸ͨ͘͞Μɾɾɾɻ

    ຊ೔͸τϥϒϧղܾͷͨΊͷٕ͚ͩ Ͱ͸ͳ͘ɺߟ͑ํ΋͝঺հ͠·͢
  3. Copyright © 2007 Sun Microsystems K.K. 3 ࣗݾ঺հ • Java

    ΤόϯδΣϦετ ( ෭ۀ ) > ϒϩάΛॻ͍ͨΓηϛφʔʹߦͬͨΓ͢Δ • ΞΠσϯςΟςΟ؅ཧ ( ຊۀ ) > ੡඼ͷ঺հ΍ɺఏҊ׆ಈͳͲ • ͦͷ·͑ > Java ίϯαϧςΟϯάͳͲ • ͦͷଞ > Sun ೖࣾ΋͏ؙ͙͢ 6 ೥໨ > ϓϩάϥϛϯάྺ 15 d 18 ೥
  4. Copyright © 2007 Sun Microsystems K.K. 4 ࣗݾ঺հ ( ଓ͖

    ) • աڈ̒೥ؒͷ࢓ࣄͷ܏޲ > ҰͭͷϓϩδΣΫτʹ௕ظؒࢀՃͨ͠ࣄ͸͋·Γͳ͍ > ಥવ࿩͕෣͍ࠐΜͰ͖ͯɺΑ͘Θ͔Βͳ͍··ࢀՃ͢Δ > ࢖༻͞Ε͍ͯΔςΫϊϩδʔ͕஌͍ͬͯΔ΋ͷ͚ͩͱ͸ݶ Βͳ͍ > ࡞ۀͷ༏ઌ౓͸͋Ε΋͜Ε΋ʮ࠷༏ઌʯͰ͋Δ
  5. Copyright © 2007 Sun Microsystems K.K. 5 ຊ೔ͷ಺༰ʹؚ·Εͳ͍ͱ ͜Ζ •

    ஶ࡞ݖ΍ಛڐͷτϥϒϧͰࠔ͍ͬͯΔ • ͕Μ͹͍ͬͯΔͷʹɺڅྉΛ͋͛ͯ΋Β͑ͳ͍ • ରਓؔ܎ͷτϥϒϧͰࠔ͍ͬͯΔ • ϓϩδΣΫτ͕ຫੑతʹσεϚʔνͰɺൈ͚ग़͍ͨ͠
  6. Copyright © 2007 Sun Microsystems K.K. 6 ຊ೔ͷ͍͍ͩͨͷ಺༰ • τϥϒϧʹ͍ͭͯͷ༧උ஌ࣝ

    • ۩ମతͳτϥϒϧʹ͍ͭͯͷ࿩ • τϥϒϧղܾೳྗΛߴΊΔํ๏ͷ࿩
  7. Copyright © 2007 Sun Microsystems K.K. 7 υϦϧ 1: τϥϒϧͷ࣌ͬͯ

    ͜Μͳײ͡Ͱ͢ΑͶ
  8. Copyright © 2007 Sun Microsystems K.K. 8 ࢥ͍ग़ͯ͠Έ͍ͯͩ͘͞ • τϥϒϧͰప໷Λͨ͜͠ͱ͕͋Δ

    • ؼ୐͠Α͏ͱͨ͠Βి࿩Ͱݺͼ໭͞Εͨ • ேى͖ͨΒܞଳʹண৴ཤྺ͕ͨ͘͞Μ • ͦͷଞ
  9. Copyright © 2007 Sun Microsystems K.K. 9 ࢥ͍ग़ͯ͠Έ͍ͯͩ͘͞ • τϥϒϧͰప໷Λͨ͜͠ͱ͕͋Δ

    • ؼ୐͠Α͏ͱͨ͠Βి࿩Ͱݺͼ໭͞Εͨ • ேى͖ͨΒܞଳʹண৴ཤྺ͕ͨ͘͞Μ • ͦͷଞ • ௨ৗͷϧʔνϯ͸ػೳ͍ͯ͠ͳ͍ • ৘ใ͸͏·͘੔ཧ͞Ε͍ͯͳ͍ • ݱ৔͸ίϯτϩʔϧΛࣦ͍ͬͯΔ
  10. Copyright © 2007 Sun Microsystems K.K. 10 ϓϩδΣΫτͷྲྀΕ τϥϒϧ ຊདྷͷྲྀΕ

    τϥϒϧʹΑΔྲྀΕ
  11. Copyright © 2007 Sun Microsystems K.K. 11 ϓϩδΣΫτͷྲྀΕ τϥϒϧ ຊདྷͷྲྀΕ

    τϥϒϧʹΑΔྲྀΕ PM ʹΑΔ༧ଌൣғ
  12. Copyright © 2007 Sun Microsystems K.K. 12 ϓϩδΣΫτͷྲྀΕ τϥϒϧ ຊདྷͷྲྀΕ

    τϥϒϧʹΑΔྲྀΕ τϥϒϧ γϡʔτ PM ʹΑΔ༧ଌൣғ
  13. Copyright © 2007 Sun Microsystems K.K. 13 τϥϒϧղܾͷΈͪ͢͡ ৘ใΛऩूʗ੔ཧ͢Δ ίϯτϩʔϧΛऔΓ໭͢

    ௨ৗͷϧʔνϯʹ໭͢
  14. Copyright © 2007 Sun Microsystems K.K. 14 ίϯτϩʔϧΛऔΓ໭ͦ͏! • ͕Μ͹ͬͨਓΛඇ೉ͯ͠͸͍͚ͳ͍

    > ͕Μ͹ͬͨਓ͸ঢ়گΛΑ͘஌͍ͬͯΔ • ͳΔ΂͘٬؍తͳ৘ใΛऩू͢Δ > ࠞཚ͍ͯ͠Δݱ৔Ͱ͸ώΞϦϯά݁Ռʹ͸ΏΒ͕͗͋Δ > ࢥ͍ (guess) ͱࣄ࣮ (fact) Λ۠ผ͢Δ > ݕࡧՄೳͳ৔ॴʹஔ͍͓ͯ͘ ( ϝʔϧϘοΫεɺ Wiki ɾɾɾ ) • Լखͳమ๒਺ଧͪΌ͋ͨΔɾɾɾ ? > ͋ͨΔݟࠐΈ͕௿͍ͷͰɺίετߴ > ͦΕͳΒɺͦ΋ͦ΋୯ମςετͰൃݟ͞Ε͍ͯͨͷͰ͸ ?
  15. Copyright © 2007 Sun Microsystems K.K. 15 ίϯτϩʔϧΛऔΓ໭ͦ͏!( ଓ͖ )

    • Կ͕࠷΋ѱӨڹΛٴ΅͍ͯ͠Δͷ͔ΛߜΓࠐΉ > ઀ଓͰ͖ͳ͍ ? > ύϑΥʔϚϯε ? > γεςϜΫϥογϡ ? > όά ? ͲΜͳόά ? • ԿΛղܾ͢Ε͹࠷΋ސ٬ຬ଍౓͕ߴ·Δͷ͔ ? > Ͳ͏͍͏࡞ۀΛ͢Ε͹࠷΋ت͹ΕΔͷ͔ ? > આಘࡐྉΛूΊΔ
  16. Copyright © 2007 Sun Microsystems K.K. 16 Ͳ͔͜ΒखΛ෇͚Δ͔Λܾ ΊΔ ೉͍͠໰୊

    ͔ΜͨΜͳ໰୊ ղܾʹΑΓސ٬ຬ଍౓͕ߴ·Δ ղܾͯ͠΋͋·Γຬ଍౓͸͔ΘΒͳ͍ ໰୊ 1 ໰୊ 2 ໰୊ 3 ໰୊ 4
  17. Copyright © 2007 Sun Microsystems K.K. 17 Ͳ͔͜ΒखΛ෇͚Δ͔Λܾ ΊΔ (

    ଓ͖ ) ೉͍͠໰୊ ͔ΜͨΜͳ໰୊ ղܾʹΑΓސ٬ຬ଍౓͕ߴ·Δ ղܾͯ͠΋͋·Γຬ଍౓͸͔ΘΒͳ͍ ໰୊ 1 ໰୊ 2 ໰୊ 3 ໰୊ 4 ݴ͍ͬͯΔਓʹΑͬͯมΘΓ΍͍͢ ఻ݴήʔϜʹΑͬͯมಈ͠΍͍͢
  18. Copyright © 2007 Sun Microsystems K.K. 18 Ͳ͔͜ΒखΛ෇͚Δ͔Λܾ ΊΔ (

    ଓ͖ ) • ͳΔ΂͘٬؍తͳදݱʹஔ͖׵͑ͯ༏ઌॱҐ෇͚ > ϏδωεɾΠϯύΫτ ( ֹۚɾӨڹϢʔβ਺ ) > ͳͥɺ XX ೔·Ͱʹղܾ͕ඞཁͳͷ͔ • աڈͷτϥϒϧʹ·ͭΘΔ΍ΓऔΓͷ܏޲ • ࠷΋͓٬༷ͱύΠϓΛ͍࣋ͬͯΔਓͷ௚ײΛ৴͡Δ • τϥϒϧղܾʹՃΘΔࣄͷͰ͖Δϝϯόʔͷྗྔ
  19. Copyright © 2007 Sun Microsystems K.K. 19 υϦϧ̍ɿ·ͱΊ • ͳΔ΂͘٬؍తͳ৘ใΛूΊΔ

    • Ͳ͔͜ΒखΛ෇͚Δ͔ΛܾΊΔ • ίϯτϩʔϧΛऔΓ໭͢
  20. Copyright © 2007 Sun Microsystems K.K. 20 υϦϧ 2: τϥϒϧͬͯݴ͏ͱ

    ͜Μͳ΍ͭͰ͢ΑͶ
  21. Copyright © 2007 Sun Microsystems K.K. 21 ೉͍͠τϥϒϧͱ͍͑͹ɾɾɾ • ౴͕͑ҧ͏

    • γεςϜΫϥογϡ • ࿈ܞઌʹ઀ଓͰ͖ͳ͍ • ϝϞϦෆ଍ • ύϑΥʔϚϯε͕Ͱͳ͍ • ηΩϡϦςΟͷ໰୊ • ͦͷଞ
  22. Copyright © 2007 Sun Microsystems K.K. 22 ͳͥ೉͍͠ͷ͔ • ख͕͔Γ͕গͳ͍

    > ϩάʹग़ྗ͞ΕΔ৘ใ͕গͳ͍౳ • खݩͷ؀ڥͰ͸࠶ݱ͠ͳ͍ > ؀ڥ΍σʔλʹґଘ ? • ѻ͏໰୊ͷݪҼ͕޿ൣғ > ݪҼͱͳΔ෦෼͕ࢸΔॴʹ֦ࢄ͍ͯ͠Δ • ࠜຊతͳ෦෼ʹݪҼ͕͋Δ > γεςϜΞʔΩςΫνϟ
  23. Copyright © 2007 Sun Microsystems K.K. 23 ͳͥ೉͍͠ͷ͔ • ख͕͔Γ͕গͳ͍

    > ϩάʹग़ྗ͞ΕΔ৘ใ͕গͳ͍౳ • खݩͷ؀ڥͰ͸࠶ݱ͠ͳ͍ > ؀ڥ΍σʔλʹґଘ ? • ѻ͏໰୊ͷݪҼ͕޿ൣғ > ݪҼͱͳΔ෦෼͕ࢸΔॴʹ֦ࢄ͍ͯ͠Δ • ࠜຊతͳ෦෼ʹݪҼ͕͋Δ > γεςϜΞʔΩςΫνϟ ݪҼෆ໌ ݪҼ͸ಛఆࡁΈ
  24. Copyright © 2007 Sun Microsystems K.K. 24 ख͕͔Γ͕গͳ͍τϥϒϧ ղܾ •

    ϩάϨϕϧΛΑΓৄࡉʹ͢Δ > σόοάϩάͷ༗ޮԽ > ϓϩάϥϜʹϩάग़ྗΛ૊ΈࠐΉ > ίΞμϯϓΛऔಘͰ͖ΔΑ͏ʹઃఆ͢Δ • σόοΨ΍πʔϧΛ࢖͏ > ՄೳͳݶΓ༗ޮར༻͢Δ > ಈతͳ৘ใͷऔಘ΍ɺಈ࡞ͷ೺Ѳ
  25. Copyright © 2007 Sun Microsystems K.K. 25 खݩͷ؀ڥͰ͸࠶ݱ͠ͳ͍ • ௕ظઓʹͳΔՄೳੑ͕ߴ͍ͷͰɺަবͷࡐྉΛू

    ΊΔ > ຊ൪؀ڥͰ͔͠ൃੜ͠ͳ͍໰୊ͷղܾ͸ࠔ೉ > σόοΨ΍πʔϧΛ༰қʹಋೖ͢Δࣄ͕Ͱ͖ͳ͍ > SOX ๏ʹΑΓɺຊ൪؀ڥʗσʔλΛ͔ͭͬͨ࠶ݱςετ͸ ΑΓࠔ೉ʹ > աڈͷྨࣅࣄྫ౳ͷ৘ใΛूΊΔ • ӡ༻ʹӨڹΛ༩͑ʹ͍͘πʔϧͷಋೖΛަব > Dtrace
  26. Copyright © 2007 Sun Microsystems K.K. 26 ѻ͏໰୊ͷݪҼ͕޿ൣғ • ͳΔ΂ࣗ͘ಈԽͯ͠ղܾͰ͖Δํ๏Λߟ͑Δ

    > πʔϧͷಋೖ͋Δ͍͸εΫϦϓτΛ࡞੒ • ໢ཏతʹमਖ਼ʗରࡦ͕Ͱ͖͔ͨͲ͏͔Λௐ΂Δํ ๏Λ४උ͢Δ > πʔϧ΍εΫϦϓτʹΑΔϨϙʔτͷ࡞੒
  27. Copyright © 2007 Sun Microsystems K.K. 27 ࠜຊతͳ෦෼ʹݪҼ͕͋Δ • ௕ظԽ͢ΔՄೳੑ͕ߴ͍ͷͰɺҰ࣌తͳճආࡦΛ

    ࡞੒ > ަবͷࡐྉΛूΊΔ > Ұ࣌తͳճආࡦͷ࡞੒΋ݕ౼͢Δ > े෼ަবͷࡐྉΛूΊͳ͍ͱɺҰ࣌తͳճආࡦ͕ͦͷ· ·࠾༻͞Εͯܧଓతʹ࠾༻͞ΕΔࣄʹɾɾɾ • ΞʔΩςΫνϟͷઃܭͰ͸z Simple is Best” ͕ͩɺ l Simple is Hard” Ͱ͋Δ͜ͱ΋Α͘ߟྀ͓ͯ͘͠
  28. Copyright © 2007 Sun Microsystems K.K. 28 υϦϧ̎ɿ·ͱΊ • πʔϧ΍εΫϦϓτΛ࢖ͬͯͳΔ΂

    ͘खؒΛল͘ • ϓϩάϥϜͷमਖ਼͚ͩͰͳ͘ɺ࡞ۀ ͕΍Γ΍͍͢Α͏ʹަবͷ४උ
  29. Copyright © 2007 Sun Microsystems K.K. 29 υϦϧ 3: ࢖ͬͯͳ͍ͭ΋Γɻ

    Ͱ΋ɺ࢖͍ա͗
  30. Copyright © 2007 Sun Microsystems K.K. 30 $ java JavaNightSeminar

    Exception in thread “main” java.lang.OutOfMemoryError
  31. Copyright © 2007 Sun Microsystems K.K. 31 Q. OutOfMemoryError ͷݪҼ

    ͸ ? 1. OS ͷϝϞϦ͕଍Γͳ͘ͳͬͨ 2. Full GC ͕࣮ߦ͞ΕͨͨΊ ώʔϓྖҬ͕͜ΕҎ্֦ுͰ͖ͳ͍ Πϯελϯε਺͕ଟ͗͢Δ
  32. Copyright © 2007 Sun Microsystems K.K. 32 Java VM ʹ͓͚ΔϝϞϦྖҬ

    1.4.2 5.0 6 ̘ʗωΠςΟϒ ώʔϓྖҬ Java ώʔϓྖҬ Java ίʔυ PermGen ྖҬ
  33. Copyright © 2007 Sun Microsystems K.K. 33 Java VM ʹ͓͚ΔϝϞϦྖҬ

    1.4.2 5.0 6 ̘ʗωΠςΟϒ ώʔϓྖҬ Java ώʔϓྖҬ Java ίʔυ PermGen ྖҬ ωΠςΟϒϥΠϒϥϦ͕ malloc() ͨ͠ϝϞϦྖҬ εϨουͷωΠςΟϒɾελοΫྖҬ ωΠςΟϒελοΫ ωΠςΟϒελοΫ Java ελοΫ Java ελοΫ ωΠςΟϒελοΫ Java ελοΫ ωΠςΟϒελοΫྖҬαΠζ͸ -Xss<size> Ͱࢦఆ
  34. Copyright © 2007 Sun Microsystems K.K. 34 Java VM ʹ͓͚ΔϝϞϦྖҬ

    1.4.2 5.0 6 ̘ʗωΠςΟϒ ώʔϓྖҬ Java ώʔϓྖҬ Java ίʔυ PermGen ྖҬ Java ΦϒδΣΫτͷΠϝʔδ͕ ֨ೲ͞ΕΔྖҬ εϨουͷ Java ελοΫྖҬ Java ελοΫྖҬαΠζ͸ -Xoss<size> Ͱࢦఆ
  35. Copyright © 2007 Sun Microsystems K.K. 35 Java VM ʹ͓͚ΔϝϞϦྖҬ

    1.4.2 5.0 6 ̘ʗωΠςΟϒ ώʔϓྖҬ Java ώʔϓྖҬ Java ίʔυ PermGen ྖҬ Ϋϥεఆٛ΍ϝιουఆٛͳͲ PermGen ྖҬαΠζ͸ -XX:PermSize=<size> ͓Αͼ -XX:MaxPermSize=<size> Ͱࢦఆ
  36. Copyright © 2007 Sun Microsystems K.K. 36 OutOfMemoryErrorʹͳΔঢ়گ 1.4.2 5.0

    6 ̘ʗωΠςΟϒ ώʔϓྖҬ Java ώʔϓྖҬ Java ίʔυ PermGen ྖҬ Java ίʔυ PermGen ྖҬ ͲΕ͔ͻͱͭͷྖҬͰ΋ɺ ͜ΕҎ্֦ுͰ͖ͳ͘ͳͬͨ৔߹
  37. Copyright © 2007 Sun Microsystems K.K. 37 ϝϞϦෆ଍ճආͷͨΊͷΞ Ϋγϣϯ ಺෦͕Ͳ͏ͳ͍ͬͯΔͷ͔Λ

    ϞχλϦϯά͢Δ
  38. Copyright © 2007 Sun Microsystems K.K. 38 ϝϞϦෆ଍ճආͷͨΊͷΞ Ϋγϣϯ ಺෦͕Ͳ͏ͳ͍ͬͯΔͷ͔Λ

    ϞχλϦϯά͢Δ ಺ଁࢷ๱͕ɾɾɾ
  39. Copyright © 2007 Sun Microsystems K.K. 39 VisualGC http://java.sun.com/performance/jvmstat/ ϝϞϦͷ࢖༻ঢ়گΛάϥϑΟΧϧʹදࣔ

    1.4.2 5.0 6 JRE 1.4.2 Ͱ͸ -XX:+UsePerfData ͷ෇Ճ͕ඞཁ
  40. Copyright © 2007 Sun Microsystems K.K. 40 jstat $ jstat

    -gcutil 2080 1000 S0 S1 E O P YGC YGCT FGC FGCT GCT 40.63 0.00 52.78 70.81 99.62 392 3.390 10 6.894 10.284 40.63 0.00 56.92 70.81 99.62 392 3.390 10 6.894 10.284 40.63 0.00 61.10 70.81 99.62 392 3.390 10 6.894 10.284 40.63 0.00 64.65 70.81 99.62 392 3.390 10 6.894 10.284 40.63 0.00 70.04 70.81 99.62 392 3.390 10 6.894 10.284 JRE 1.4.2 Ͱ͸ -XX:+UsePerfData ͷ෇Ճ͕ඞཁ JDK 6 ΑΓਖ਼ࣜπʔϧʹঢ֨ 1.4.2 5.0 6 Visual GC ͷίϚϯυϥΠϯ൛
  41. Copyright © 2007 Sun Microsystems K.K. 41 jconsole JRE 5.0

    Ͱ͸ -Dcom.sun.management.jmxremote ͷ෇Ճ͕ඞཁ JRE 6 Ͱ͸ಉҰϚγϯɺಉҰϢʔβͷ৔߹Φϓγϣϯෆཁ 1.4.2 5.0 6 ϝϞϦΛ͸͡Ίɺ Java VM ͓Αͼ ΞϓϦέʔγϣϯͷ༷ʑͳ৘ใΛ JMX ܦ༝ͰϞχλϦϯάɾ؅ཧՄೳ
  42. Copyright © 2007 Sun Microsystems K.K. 42 JRE 5.0 Ҏ߱ʹ͓͚Δվળ

    1.4.2 5.0 6 ̘ʗωΠςΟϒ ώʔϓྖҬ Java ώʔϓྖҬ Java ίʔυ PermGen ྖҬ Java ίʔυ PermGen ྖҬ Hello, 3642 Hello, 3643 Hello, 3644 Exception in thread "main" java.lang.OutOfMemoryError: PermGen space ͲͷྖҬͰ OutOfMemoryError ͱͳ͔ͬͨ දࣔ͞ΕΔΑ͏ʹվળ
  43. Copyright © 2007 Sun Microsystems K.K. 43 Java SE 6

    Ҏ߱ʹ͓͚Δվળ 1.4.2 5.0 6 ̘ʗωΠςΟϒ ώʔϓྖҬ Java ώʔϓྖҬ Java ίʔυ PermGen ྖҬ Java ίʔυ PermGen ྖҬ Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2882) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390) at java.lang.StringBuffer.append(StringBuffer.java:224) at JavaNightSeminar.main(JavaNightSeminar.java:6) ελοΫτϨʔε΋දࣔ͞ΕΔΑ͏ʹ
  44. Copyright © 2007 Sun Microsystems K.K. 44 -XX:+HeapDumpOnOutOfMemoryError 1.4.2 5.0

    6 ̘ʗωΠςΟϒ ώʔϓྖҬ Java ώʔϓྖҬ Java ίʔυ PermGen ྖҬ Java ίʔυ PermGen ྖҬ Hello, 2667 Hello, 2668 java.lang.OutOfMemoryError: PermGen space Dumping heap to java_pid148.hprof ... Heap dump file created [3771471 bytes in 0.200 secs] Exception in thread "main" java.lang.OutOfMemoryError: PermGen space OutOfMemoryError ൃੜ࣌ʹώʔϓͷ μϯϓΛੜ੒ ( ޙड़ͷπʔϧͰղੳ ) JRE 1.4.2_12 Ҏ߱ɺ JRE 1.5.0_07 Ҏ߱ɺ JRE 1.6.0 Ҏ߱Ͱαϙʔτ
  45. Copyright © 2007 Sun Microsystems K.K. 45 ώʔϓμϯϓͷऔಘ(jmap) 1.4.2 5.0

    6 $ jps 2080 Main 3864 jar 2348 jps $ jmap -dump:live,file=filename.dmp,format=b 2080 ࣮ߦதͷϓϩηεͷώʔϓμϯϓΛ ͋Β͔͡Ίର৅ JVM ʹΦϓγϣϯΛ Ճ࣮͑ͣߦՄೳ ( ಉҰϚγϯͷಉҰϢʔβͷΈ )
  46. Copyright © 2007 Sun Microsystems K.K. 46 jhat (Java Heap

    Analysis Tool) 1.4.2 5.0 6 JDK 6 ඪ४౥ࡌͷπʔϧ ώʔϓͷ౷ܭ΍ɺΦϒδΣΫτͷࢀরؔ܎Λ ղੳ͢ΔͨΊͷπʔϧ (1.4.2 ͷμϯϓ΋ಡΈࠐΈՄೳ )
  47. Copyright © 2007 Sun Microsystems K.K. 47 NetBeans 5.5 Profiler

    ώʔϓͷ࢖༻ঢ়گ΍ɺΠϯελϯεͷ ੜ੒ɾফ໓ঢ়گʹؔ͢Δ౷ܭΛऔಘ͠ ໰୊ՕॴΛ੾Γ෼͚ 1.4.2 5.0 6
  48. Copyright © 2007 Sun Microsystems K.K. 48 NetBeans 6.0 Profiler

    ݱࡏ։ൃதͷ৽όʔδϣϯ ώʔϓͷμϯϓΛಡΈࠐΜͰɺΦϒδΣΫτͷ ࢀরؔ܎Λ෼ੳՄೳ 1.4.2 5.0 6 ։ൃத
  49. Copyright © 2007 Sun Microsystems K.K. 49 ϝϞϦϦʔΫͷݟ͚ͭํ ౷ܭ৘ใ͔ΒϝϞϦΛ઎ڌ͍ͯ͠ΔΠϯελϯεͷछྨΛ൑ผ ྫ

    ) char[] ͕͋΍͍͠
  50. Copyright © 2007 Sun Microsystems K.K. 50 ϝϞϦϦʔΫͷݟ͚ͭํ( ଓ͖ )

    ϦʔΫΛҾ͖ى͍ͯ͜͠ΔՄೳੑͷ͋ΔιʔεΛ෼ੳ όοΫτϨʔεΛ֬ೝͯ͠ ո͍͠ΠϯελϯεΛ࡞͍ͬͯΔ ιʔεΛ୳Δ
  51. Copyright © 2007 Sun Microsystems K.K. 51 ϝϞϦϦʔΫͷݟ͚ͭํ( ଓ͖ )

    Πϯελϯεʹର͢ΔࢀরΛ௥੻ ෆཁͳ Πϯελϯε ଞͷ Πϯελϯε ࢀরؔ܎͕͋Δͱ GC Ͱճऩ͞Εͳ͍
  52. Copyright © 2007 Sun Microsystems K.K. 52 υϦϧ̏ɿ·ͱΊ • OutOfMemoryError

    ʹͳΔ࢓૊ΈΛ೺ Ѳ͓ͯ͘͠ • JVM ͷػೳ΍πʔϧͷ࢖͍ํΛϚ ελʔ͓ͯ͘͠ •ద౓ͳӡಈΛͯ͠ංେԽ͠ͳ͍Α͏ ʹ͓ͯ͘͠
  53. Copyright © 2007 Sun Microsystems K.K. 53 υϦϧ 4: ίʔυͷࢁΛ

    ໨ͷલʹͯ͠ɾɾɾ
  54. Copyright © 2007 Sun Microsystems K.K. 54 Q. ίʔυϨϏϡʔͰେࣄͳࣄ ॏശͷ۱Λͭͭ͘Α͏ʹ͢Δ

    ࣄલʹ͋Δఔ౓౰ͨΓΛ෇͚͓ͯ͘ πʔϧΛ׆༻͢Δ େྔҹ࡮ͷ४උ ೜଱
  55. Copyright © 2007 Sun Microsystems K.K. 55 ࣄલʹ౰ͨΓΛ෇͚͓ͯ͘ • ঱ঢ়΍աڈͷࣄྫ͔Βո͍͠෦෼Λಛఆ͓ͯ͘͠

    • UML ϦόʔεΤϯδχΞϦϯάΛ࢖ͬͯ֓؍Λ೺Ѳ • ίʔυνΣοΫπʔϧΛ׆༻͢Δ > PMD (http://pmd.sourceforge.net) > Checkstyle (http://checkstyle.sourceforge.net) > FindBugs (http://findbugs.sourceforge.net)
  56. Copyright © 2007 Sun Microsystems K.K. 56 UML ϦόʔεΤϯδχΞϦϯά •

    NetBeans 5.5 Enterprise Pack or UML Ϟδϡʔϧ (http://ja.netbeans.org)
  57. Copyright © 2007 Sun Microsystems K.K. 57 ίʔυνΣοΫπʔϧ • ઃఆͨ͠ϧʔϧʹैͬͯιʔείʔυΛεΩϟϯ

    • ໢ཏੑ͕͋ΓɺҰ؏ͨ͠ϙϦγʔͰݕࠪՄೳ
  58. Copyright © 2007 Sun Microsystems K.K. 58 Q1. όάΛ୳͍ͯͩ͘͠͞ for

    (int i = 0; i < 10; i++) { for (int j = 0; j < 20; i++) { total += a[i][j]; } }
  59. Copyright © 2007 Sun Microsystems K.K. 59 A1. όάΛ୳͍ͯͩ͘͠͞ for

    (int i = 0; i < 10; i++) { for (int j = 0; j < 20; j++) { total += a[i][j]; } } i ͱ j ͷλΠϓϛε
  60. Copyright © 2007 Sun Microsystems K.K. 60 Q2. όάΛ୳͍ͯͩ͘͠͞ public

    class Seminar { private String name; public boolean equals(Seminar s) { return name.equals(s.name) && name != null; } }
  61. Copyright © 2007 Sun Microsystems K.K. 61 A2. όάΛ୳͍ͯͩ͘͠͞ public

    boolean equals(Object o) { if (o == null) return false; if (o instanceof Seminar) { Seminar s = (Seminar) o; return name != null && name.equals(s.name) } else return false; } null νΣοΫΛઌʹߦΘͳ͍ͱҙຯ͕ແ͍
  62. Copyright © 2007 Sun Microsystems K.K. 62 A2. όάΛ୳͍ͯͩ͘͠͞ public

    boolean equals(Object o) { if (o == null) return false; if (o instanceof Seminar) { Seminar s = (Seminar) o; return name != null && name.equals(s.name) } else return false; } Ҿ਺͸ Object Ͱͳ͚Ε͹ͳΒͳ͍
  63. Copyright © 2007 Sun Microsystems K.K. 63 A2. όάΛ୳͍ͯͩ͘͠͞ public

    class Seminar { public boolean equals(Object o) { ... } public int hashCode() { ... } } int hashCode() ΋࣮૷
  64. Copyright © 2007 Sun Microsystems K.K. 64 େྔͷίʔυΛղੳ͢Δͱ ͖ •

    IDE ͷػೳ͸ศར͚ͩΕͲॏ͗͢Δ • ίʔυݕࡧΤϯδϯ΍ HTML ԽΛ׆༻ > େྔͷίʔυΛzϒϥ΢ζzͱ͍͏ҙຯͰ͸ Web ϒϥ΢β ͸࢖͍΍͍͢ > ઐ༻ιϑτ͸ݕࡧ΋Ͱ͖ͯߴ଎ • ίϚϯυϥΠϯͷڧΈ͸݈ࡏ > grep, find, awk, perl ͳͲͳͲ > IDE ͷػೳʹͳͯ͘΋ࣗ࡞͢Δ ( ͳΔ΂͘ίϯϐϡʔλʹ ࢓ࣄΛͤ͞Δ )
  65. Copyright © 2007 Sun Microsystems K.K. 65 ίʔυݕࡧ: OpenGrok •

    OpenGrok > http://www.opensolaris.org/os/project/opengrok > OpenSolaris ϓϩδΣΫτͰ࡞੒͞ΕͨݕࡧʗΫϩεϦϑΝ ϨϯεΤϯδϯ > Java ͚ͩͰͳ͘ɺ C/C++ ɺγΣϧεΫϦϓτͳͲʹ΋ରԠ > ಋೖ͕͔ΜͨΜ
  66. Copyright © 2007 Sun Microsystems K.K. 66 OpenGrok ͷಋೖ •

    ඞཁϑΝΠϧΛμ΢ϯϩʔυ > opengrok-0.4.tar.gz ... OpenGrok ຊମͱιʔε > http://www.opensolaris.org/os/project/opengrok > Exuberant ctags (http://ctags.sourceforge.net) > Java5.0 Ҏ্ > Tomcat͔ GlassFish > Subversion 1.3.0 (Subversion Λ࢖͏৔߹ͷΈ ) > Mercurial (Mercurial Λ࢖͏৔߹ͷΈ )
  67. Copyright © 2007 Sun Microsystems K.K. 67 OpenGrok ΠϯσοΫεͷ࡞੒ (1)

    ىಈͯ͠ .. (2) ιʔεͱΠϯσοΫε֨ೲઌΛબ୒ (3) Update ͯ͠׬ྃ (opengrok.jar Λ࣮ߦ )
  68. Copyright © 2007 Sun Microsystems K.K. 68 OpenGrok ιʔεͷݕࡧ(Swing)

  69. Copyright © 2007 Sun Microsystems K.K. 69 OpenGrok ιʔεͷݕࡧ४උ(Web) ഑෍ϑΝΠϧ

    source.war ͷதʹ͋Δ WEB-INF/web.xml ʹ ΠϯσοΫεΛ࡞੒ͨ͠σΟϨΫτϦ (DATA_ROOT)ͱ ιʔείʔυͷσΟϨΫτϦ (SRC_ROOT) Λهड़ͯ͠σϓϩΠ
  70. Copyright © 2007 Sun Microsystems K.K. 70 OpenGrok ιʔεͷݕࡧ४උ(Web) ΠϯσοΫεΛ࡞੒ͨ͠σΟϨΫτϦ

    (DATA_ROOT)ͱ ιʔείʔυͷσΟϨΫτϦ (SRC_ROOT) Λ web.xml ʹهड़ <web-app> <display-name>OpenGrok</display-name> <description>A wicked fast source browser</description> <context-param> <param-name>DATA_ROOT</param-name> <param-value>/directory/containing/data</param-value> </context-param> <context-param> <param-name>SRC_ROOT</param-name> <param-value>/directory/containing/src</param-value> </context-param>
  71. Copyright © 2007 Sun Microsystems K.K. 71 OpenGrok ιʔεͷݕࡧ(web)

  72. Copyright © 2007 Sun Microsystems K.K. 72 OpenGrok ιʔεͷӾཡ(web)

  73. Copyright © 2007 Sun Microsystems K.K. 73 υϦϧ̐ɿ·ͱΊ • ͍͖ͳΓࡉ͔͘ಡΈ࢝ΊΔલʹશ

    ମΛ೺Ѳ͓ͯ͘͠ • ໨తʹదͨ͠πʔϧΛ࢖͏ ( ྫ : νΣοΫπʔϧɺӾཡઐ༻ιϑτ )
  74. Copyright © 2007 Sun Microsystems K.K. 74 υϦϧ 5: ଎͞͸ɺྗ

  75. Copyright © 2007 Sun Microsystems K.K. 75 Q. νϡʔχϯάͰେࣄͳࣄ τϥΠˍΤϥʔ

    ίϝϯτΛ࡟ͬͯιʔεΛܰ͘͢Δ ͳΔ΂͘ΠϯελϯεΛ࠶ར༻͢ΔΑ͏ ʹίʔυΛॻ͖׵͑Δ ౷ܭσʔλΛऔಘ͢Δ
  76. Copyright © 2007 Sun Microsystems K.K. 76 ౷ܭΛऔͬͯૂ͍ΛఆΊΔ • Ή΍ΈͳτϥΠˍΤϥʔ͸࣌ؒͷແବ

    • ౷ܭΛऔͬͯޮՌͷ͋Γͦ͏ͳͱ͜ΖΛ୳͢ > ॏ͍ॲཧ > ແବͳॲཧ > සൟʹݺͼग़͞ΕΔॲཧ > I/O ଴ͪ΍ଞγεςϜͷ࿈ܞ଴ͪ
  77. Copyright © 2007 Sun Microsystems K.K. 77 ϨΠςϯγͱεϧʔϓοτ • νϡʔχϯά໨ඪ͸஫ҙਂ͘ઃఆ͢Δ

    > ϨΠςϯγ ( ฏۉԠ౴࣌ؒ ) > ྫ . ฏۉԠ౴ 700ms Ҏ಺ > εϧʔϓοτ ( ୯Ґ࣌ؒ͋ͨΓͷॲཧྔ ) > ྫ . 1 ෼ؒ͋ͨΓฏۉ 1300 τϥϯβΫγϣϯ
  78. Copyright © 2007 Sun Microsystems K.K. 78 ϨΠςϯγͱεϧʔϓοτ ͷؔ܎ •

    Ϣʔβ਺ͷ૿Ճͱͱ΋ʹϨΠςϯγ͸૿Ճ • ͋ΔϢʔβ਺Λڥʹεϧʔϓοτ͸௿Լ Ϣʔβ਺
  79. Copyright © 2007 Sun Microsystems K.K. 79 ϓϩϑΝΠϦϯά: NetBeans Profiler

  80. Copyright © 2007 Sun Microsystems K.K. 80 ϓϩϑΝΠϦϯά: NetBeans Profiler

  81. Copyright © 2007 Sun Microsystems K.K. 81 JMeter ͰεϧʔϓοτΛܭଌ͢Δ •

    ෛՙੜ੒ˍϨεϙϯεϩάऔಘ > ϩάΛՃ޻ͯ͠σʔλΛ෼ੳ 0 1000 2000 3000 4000 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 ϘτϧωοΫ͕ݱΕ࢝Ίͨέʔε ฒྻ౓ ( ୯Ґ࣌ؒ 1 ඵ ) 0 25 50 75 100 125 150 175 0 20 40 60 80 100 120 140 160 180 ΄ͱΜͲϘτϧωοΫ͕ͳ͍έʔε ฒྻ౓ ( ୯Ґ࣌ؒ 1 ඵ ) εϧʔϓοτ (1 ඵؒ͋ͨΓͷॲཧ׬ྃ਺ )
  82. Copyright © 2007 Sun Microsystems K.K. 82 JMeter ͰεϧʔϓοτΛܭଌ͢Δ •

    ৄ͘͠͸ ... > http://blogs.sun.com/okazaki/entry/sdc_performance_tuning_seminar > http://blogs.sun.com/okazaki/entry/throughput_analysis_2 > http://blogs.sun.com/okazaki/entry/throughput_analysis_3
  83. Copyright © 2007 Sun Microsystems K.K. 83 DTraceΛ࢖͏ • ϗϫΠτϖʔύʔΛࢀর

    > http://sdc.sun.co.jp/solaris/topics/hotspot.html
  84. Copyright © 2007 Sun Microsystems K.K. 84 DTrace࢖༻ྫ #!/usr/sbin/dtrace -s

    dvm$1:::monitor-wait { self->my[tid, copyinstr(arg0)] = timestamp; } dvm$1:::monitor-waited { @my[tid, copyinstr(arg0)] = sum(timestamp – self->my[tid, copyinstr(arg0)]); } pid$1::exit:entry { printa(@my); exit(0); } • ΞϓϦέʔγϣϯαʔόͷ JDBC ίωΫγϣϯϓʔϧ ͷେ͖͞ͱ଴ͪ࣌ؒ
  85. Copyright © 2007 Sun Microsystems K.K. 85 8 16 32

    64 128 0 2000 4000 5000 6000 7000 8000 9000 10000 11000 12000 13000 14000 15000 0 20 40 60 80 100 Size of conn. pool Latency (µs) Occupation time (ms) DTraceͰ AppServer ΛϓϩϑΝΠϧ • ࣗ෼ͷཉ͍͠৘ใΛ๬Έ௨ΓʹऔಘՄೳ • γεςϜύϑΥʔϚϯεʹେ͖ͳӨڹΛ༩͑ͳ͍ > DTrace ࣗ਎͕աෛՙͳϓϩϑΝΠϧΛࣗಈఀࢭ
  86. Copyright © 2007 Sun Microsystems K.K. 86 υϦϧ̑ɿ·ͱΊ •౷ܭ৘ใΛ্खʹ׆༻͢Δ •πʔϧΛ׆༻͢Δ

    •νϡʔχϯά໨ඪΛΫϦΞʹ͢Δ
  87. Copyright © 2007 Sun Microsystems K.K. 87 υϦϧ 6: l

    ਓؒ͸࣌ؒతͳϓϨογϟʔΛ  ͍͔ʹ͔͚ΒΕͯ΋ɺ  ଎͘͸ߟ͑ΒΕͳ͍z Ϧελʔͷ๏ଇ
  88. Copyright © 2007 Sun Microsystems K.K. 88 ଎͘౴͑Λग़͢ͷʹॏཁͳࣄ ೴τϨͰ஁͑Δ ࿅श΍४උΛͨ͘͞Μ͓ͯ͘͠

    ίϯϐϡʔλʹ΍ΒͤΔ ଞਓʹ೚ͤΔ ௒ೳྗͰ࣌ؒΛΏͬ͘Γਐ·ͤΔ
  89. Copyright © 2007 Sun Microsystems K.K. 89 ߟ͑Δ࣌ؒ ࣮࡞ۀͷ࣌ؒ ࣄલʹ४උΛ͓ͯ͘͠

    ίϯϐϡʔλʹ΍ΒͤΔ ଞਓʹ೚ͤΔ ڠྗΛ͓͙͋ Կ΋޻෉͍ͯ͠ͳ͍ͱ͖
  90. Copyright © 2007 Sun Microsystems K.K. 90 ࣄલʹ४උΛ͓ͯ͘͠ • πʔϧͷ࢖͍ํ΍ػೳ੍ݶΛ͓֮͑ͯ͘

    > ࣮ࡍʹ࢖ͬͯΈΔࣄ͕େࣄ • ৘ใΛࣄલʹखʹೖΕ͓ͯ͘ > ೔ʑͷ৘ใऩू > աڈࣄྫͷௐࠪ > ৽ٕज़ಈ޲ͷ௥੻
  91. Copyright © 2007 Sun Microsystems K.K. 91 ࣄલͷ४උ • ࢓ࣄ͕Ұஈམͨ͠Β৘ใΛ੔ཧ

    > Wiki ɺϝʔϧɺϦϯΫूͷ੔ཧ > ݕࡧՄೳ͔ͭɺ࿈૝Մೳͳঢ়ଶʹ੔ཧ͓ͯ͘͠ࣄ͕େࣄ \\ Ұஈམͨ͠ظؒΛ ༗ޮ׆༻ ࢓ࣄͷෛՙ
  92. Copyright © 2007 Sun Microsystems K.K. 92 ࣄલͷ४උ: Ԭ࡚ͷ৔߹ •

    ϒϩάΛಡΉ > RSS ͨ͘͞Μ (30 αΠτఔ౓ ) > 100~200 ΤϯτϦ / ೔ > ͳΔ΂ࣗ͘෼΋ϒϩάʹ࢒͢ • ϝʔϧΛಡΉ > ϝʔϦϯάϦετͨ͘͞Μ (100 ఔ౓ ) > 200~300 ௨ / ೔ > ͳΔ΂͘ࢀՃ͢Δ த਎·Ͱ͔ͬ͠ΓಡΉ ͷ͸ 2 ׂఔ౓ ࠷େ 500 ΤϯτϦ / ೔ ͕ݶ౓
  93. Copyright © 2007 Sun Microsystems K.K. 93 ஌Βͳ͍ٕज़͕࢖ΘΕ͍ͯͨΒ 1. Google

    ʹ͖͍ͯΈΔ αϙʔτ֎ͱݴͬͯަব ஌͔ͬͨͿΓ ຊ԰ʹμογϡ ஌Βͳ͍ࣄͳΜͯແ͍ पΓͷਓʹฉ͖·͘Δ
  94. Copyright © 2007 Sun Microsystems K.K. 94 पΓͷਓʹฉ͖·͘Δ • τϥϒϧ࣌ͷΑ͏ʹٸ͗ͷ৔߹͸Α͘஌͍ͬͯΔਓʹ

    ฉ͘ͷ͕ϕετ • ৄ͍͠ਓ͕਎ͷपΓʹ͍ͳͯ͘΋ɺ IT Λ׆༻͢Δ > ϒϩά > ܝࣔ൘΍αϙʔτϑΥʔϥϜ > ϝʔϦϯάϦετ
  95. Copyright © 2007 Sun Microsystems K.K. 95 ຊ԰ʹμογϡ • ଟগ৘ใ͕ݹͯ͘΋ɺ৘ใ͕·ͱ·͍ͬͯΔࣄ͕ଟ

    ͍ • ΦϯϥΠϯͰຊ͕ಡΊΔ༗ྉαʔϏε΋ݕ౼
  96. Copyright © 2007 Sun Microsystems K.K. 96 l Ͱ͖·ͤΜzγϯυϩʔϜ •

    ͳ͔ͥzͰ͖·ͤΜzͱ͍͏ճ౴͚ͩ͸ଈ౴ • ͳͥͰ͖ͳ͍ͷ͔ ? > Կ͕͋ͬͨΒͰ͖Δͷ͔ɺΛߟ͑Δ > ྫɿ࣌ؒɺ༧ࢉɺؾྗɺ੍໿͕؇࿨͞ΕΔ • ๩͍͔͠ΒͰ͖ͳ͍ > ༏ઌ౓͕௿͍͔ΒͰ͖ͳ͍ɺͱݴ͍׵͑Մೳ
  97. Copyright © 2007 Sun Microsystems K.K. 97 υϦϧ̒ɿ·ͱΊ •τϥϒϧ࣌ʹ͸ࣄલͷ४උ͕େ͖ͳ खॿ͚ʹͳΔ

    •IT Λ͏·͘࢖ͬͯ࿑ྗΛܰݮ͢Δ
  98. Copyright © 2007 Sun Microsystems K.K. 98 ͋Γ͕ͱ͏͍͟͝·ͨ͠

  99. Copyright © 2007 Sun Microsystems K.K. 99 ࢀߟࢿྉ • ϒϩά

    > http://blogs.sun.com/okazaki • πʔϧؔ܎ > http://ja.netbeans.org > http://pmd.sourceforge.net > http://checkstyle.sourceforge.net > http://findbugs.sourceforge.net > http://www.opensolaris.org/os/project/opengrok • ͦͷଞ > http://sdc.sun.co.jp
  100. Takayuki Okazaki takayuki.okazaki@sun.com http://blogs.sun.com/okazaki ̎࣌ؒूத JavaTM τϥϒϧղܾυϦϧ