GlassFishとProfiler KUBOTA Yuji (@sugarlife)                            #glassfishjp                                          1
hprofGlassFishとProfiler KUBOTA Yuji (@sugarlife)                            #glassfishjp                                    ...
自己紹介• KUBOTA Yuji (@sugarlife) • 難聴者• トラブルシューター• JVM (主にGC) 好き• GlassFish/JBoss EAP 検証     検証終了                           ...
今回のお話は• GlassFish Open Source Edition 3.1.2.2の  検証中、Profiler(hprof)を利用した際に困っ  たことがあったのでその共有。                               ...
試験中に何かが発生       CPU Usage 100 75 50 25  0                ※イメージです                     #glassfishjp                          ...
まずはリソース確認• 各種リソース確認するも主立った問題なし…•   (d¦vm¦net¦*)stat / sar / sockets / ps / gc / Statspack / etc...                        ...
というわけで、• Profile! Profile!! Profile!!!                     どこかで聞いたフレーズ                               #glassfishjp             ...
Profilerは?• サードパーティ製を含めると沢山 • NetBeans Profiler • JProbe Profiler • VisualVM• 今回はJDKに付属しているhprof を利用。                 #glassfi...
GlassFishでhprofを動かそう        • CUIから     [^]$ asadmin create-profiler sample_profiler     Command create-profiler executed ...
GlassFishでhprofを動かそう • GUI(Admin Console)から                          #glassfishjp                                        10
GlassFishでhprofを動かそう • GUI(Admin Console)から                              一応お墨付き            Oracle GlassFish Server 3.1    ...
実際に動かしてみると…• 再起動が必要なので $ asadmin restart-domain : :• 終わらない           start/stopと違って                  タイムアウトしない            ...
何が起きたのか?[^]$ asadmin start-domain domain1Waiting for domain1 to start .........Error starting domain domain1.The server ex...
どうする?• GlassFishのJIRAには登録なし• 定期的に{Thread¦Heap}dump類を取得する• 他のProfilerを利用する • 諸般の理由で環境構築が難しい• Apache Felix 追いかけて原因探る • ドキュメント...
原因• ${installdir}/glassfish/config/osgi.properties    • org.osgi.framework.bootdelegation = ... に       com.sun.demo.jvmti...
結果• $ asadmin start-domainで無事起動• hprofで生成されるファイルは、     ${installdir}/glassfish/domains/<domain>/config/  に配置される。• profiler設...
まとめ• GlassFishでプロファイルするつもりが、 プロファイルするためにプロファイルしていた                       #glassfishjp                                     17
Upcoming SlideShare
Loading in …5
×

#glassfishjp GlassFishとProfiler

1,729 views

Published on

#glassfishjp 2012/09/24の発表資料。

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,729
On SlideShare
0
From Embeds
0
Number of Embeds
399
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

#glassfishjp GlassFishとProfiler

  1. 1. GlassFishとProfiler KUBOTA Yuji (@sugarlife) #glassfishjp 1
  2. 2. hprofGlassFishとProfiler KUBOTA Yuji (@sugarlife) #glassfishjp 2
  3. 3. 自己紹介• KUBOTA Yuji (@sugarlife) • 難聴者• トラブルシューター• JVM (主にGC) 好き• GlassFish/JBoss EAP 検証 検証終了 #glassfishjp 3
  4. 4. 今回のお話は• GlassFish Open Source Edition 3.1.2.2の 検証中、Profiler(hprof)を利用した際に困っ たことがあったのでその共有。 #glassfishjp 4
  5. 5. 試験中に何かが発生 CPU Usage 100 75 50 25 0 ※イメージです #glassfishjp 5
  6. 6. まずはリソース確認• 各種リソース確認するも主立った問題なし…• (d¦vm¦net¦*)stat / sar / sockets / ps / gc / Statspack / etc... ※イメージです #glassfishjp 6
  7. 7. というわけで、• Profile! Profile!! Profile!!! どこかで聞いたフレーズ #glassfishjp 7
  8. 8. Profilerは?• サードパーティ製を含めると沢山 • NetBeans Profiler • JProbe Profiler • VisualVM• 今回はJDKに付属しているhprof を利用。 #glassfishjp 8
  9. 9. GlassFishでhprofを動かそう • CUIから [^]$ asadmin create-profiler sample_profiler Command create-profiler executed successfully. [^]$ asadmin create-jvm-options --profile=true “-agentlib ¥:hprof=heap=sites,file=sample.hprof,interval=20,depth=3” Created 1 option(s) Command create-jvm-options executed successfully.hprofの詳細: http://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html 赤文字に注意 #glassfishjp 9
  10. 10. GlassFishでhprofを動かそう • GUI(Admin Console)から #glassfishjp 10
  11. 11. GlassFishでhprofを動かそう • GUI(Admin Console)から 一応お墨付き Oracle GlassFish Server 3.1 Development Guide にも記載されている #glassfishjp 11
  12. 12. 実際に動かしてみると…• 再起動が必要なので $ asadmin restart-domain : :• 終わらない start/stopと違って タイムアウトしない #glassfishjp 12
  13. 13. 何が起きたのか?[^]$ asadmin start-domain domain1Waiting for domain1 to start .........Error starting domain domain1.The server exited prematurely with exit code 1.Before it died, it produced the following output:Launching GlassFish on Felix platformERROR: Bundle org.glassfish.hk2.osgi-adapter [91] Error starting file:/opt/glassfish3/glassfish/modules/osgi-adapter.jar(org.osgi.framework.BundleException: Activator start error in bundle org.glassfish.hk2.osgi-adapter [91].)ERROR: Bundle org.glassfish.main.core.glassfish [92] Error starting file:/opt/glassfish3/glassfish/modules/glassfish.jar(org.osgi.framework.BundleException: Activator start error in bundle org.glassfish.main.core.glassfish [92].)java.lang.NoClassDefFoundError: com/sun/demo/jvmti/hprof/Tracker at org.jvnet.hk2.osgiadapter.HK2Main.start(HK2Main.java:139) at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:641) at org.apache.felix.framework.Felix.activateBundle(Felix.java:1977) at org.apache.felix.framework.Felix.startBundle(Felix.java:1895) at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191) at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295) at java.lang.Thread.run(Thread.java:722)Caused by: java.lang.ClassNotFoundException: com.sun.demo.jvmti.hprof.Tracker not found by org.glassfish.hk2.osgi-adapter [91]:(略)Caused by: java.lang.ClassNotFoundException: com.sun.demo.jvmti.hprof.Tracker not found by org.glassfish.main.core.glassfish [92]:(略)Caused by: org.glassfish.embeddable.GlassFishException: No GlassFishRuntime available at com.sun.enterprise.glassfish.bootstrap.osgi.OSGiGlassFishRuntimeBuilder.getGlassFishRuntime(OSGiGlassFishRuntimeBuilder.java:202) at com.sun.enterprise.glassfish.bootstrap.osgi.OSGiGlassFishRuntimeBuilder.build(OSGiGlassFishRuntimeBuilder.java:162) ... 9 moreError stopping framework: java.lang.NullPointerExceptionjava.lang.NullPointerException at com.sun.enterprise.glassfish.bootstrap.GlassFishMain$Launcher$1.run(GlassFishMain.java:203)Dumping allocation sites ... done.Command start-domain failed.hprof自体は有効になっているが、OSGi Bundle部分はパスが通っていないのでこけてる。 #glassfishjp 13
  14. 14. どうする?• GlassFishのJIRAには登録なし• 定期的に{Thread¦Heap}dump類を取得する• 他のProfilerを利用する • 諸般の理由で環境構築が難しい• Apache Felix 追いかけて原因探る • ドキュメント確認、 3.1だと実は動く classpath設定部分の実装確認、 btraceで追いかける(これは趣味) #glassfishjp 14
  15. 15. 原因• ${installdir}/glassfish/config/osgi.properties   • org.osgi.framework.bootdelegation = ... に com.sun.demo.jvmti.hprof, com.sun.demo.jvmti.hprof.* の両方を追加• Apache Felixのバージョン変更の影響 • 3.1以前は指定なしで動作していた X分後のお鍋 #glassfishjp 15
  16. 16. 結果• $ asadmin start-domainで無事起動• hprofで生成されるファイルは、 ${installdir}/glassfish/domains/<domain>/config/ に配置される。• profiler設定は上記ディレクトリにある domain.xmlの<profiler>属性に記述される。 • 起動しなくなったらここを削除する。 • <jvm-options>もhprof関係がないか確認。 #glassfishjp 16
  17. 17. まとめ• GlassFishでプロファイルするつもりが、 プロファイルするためにプロファイルしていた #glassfishjp 17

×