Your SlideShare is downloading. ×
29 Tips in 40 Minitues for GlassFish Fans #glassfishjp
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

29 Tips in 40 Minitues for GlassFish Fans #glassfishjp

1,475
views

Published on

29 Tips in 40 Minitues for GlassFish Fans #glassfishjp …

29 Tips in 40 Minitues for GlassFish Fans #glassfishjp

GlassFish Users Group Japan 勉強会 Winter 2012 w/大忘年会
http://atnd.org/events/32722

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,475
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 50 Tips in 50 Minutes for GlassFish Fans KUBOTA Yuji (@sugarlife) #glassfishjp
  • 2. 29 4050 Tips in 50 Minutes for GlassFish Fans KUBOTA Yuji (@sugarlife) #glassfishjp
  • 3. 自己紹介• KUBOTA Yuji (@sugarlife) • 難聴者• 通信インフラ系企業 • トラブルシューター / Java EE• JVM (主にGC) 好き #glassfishjp
  • 4. 50 Tips in 50 Minutes for GlassFish Fans• JavaOne 2012 Technical Session• 幅広くTipsを紹介し、新しくGlassFishを使う あなたへ「知らなかったけどこれから使える な」と感じて帰ってもらう• このセッションはリファレンス的な役割 • 詳細:http://wikis.oracle.com/display/GlassFish/50+Tips • 資料:https://oracleus.activeevents.com/connect/ sessionDetail.ww?SESSION_ID=4701 #glassfishjp
  • 5. 29 Tips in 40 Minutes for GlassFish Fans• 29Tips = 50 Tips - いままでに紹介したこと あるもの - 使わなさそうな機能(クラスタ/ OSGi関連))• GlassFishは開発用かJavaEEの最新機能のお 試しで使うことが多い = GlassFishその物の 学習コストはなるべく避けたい = 本Tipsの役 立ち所• GlassFish OpenSource Edition 3.1.2.2 の Multi-Languageで確認。 #glassfishjp
  • 6. 管理コンソール関連Tips #glassfishjp
  • 7. #1 Using the login Command• リモート管理すると毎回 username/ passwordを聞かれるが、login commandを 使うと格納され、以降はこれを利用して(複数) サーバにアクセスする場合に回避できる。• $ asadmin --host ouch login username / password が尋ねられ、 入力すると .asadminpass に格納される。• $ asadmin --host ouch list-clusters c1 not running #glassfishjp
  • 8. #2 Use Multimode for Batch Processing• 複数バッチ処理の走らせ方• $ cat ./batchfile.txt create-cluster c1 create-local-instance --cluster c1 i1 create-local-instance --cluster c1 i2• $ asadmin --terse(-t) --user admin multimode --file ./batchfile.txt• 途中で終了させる場合はバッチを落とす (exit/quit/Ctrl-D/Ctrl-Z) #glassfishjp
  • 9. #3 Use Shell Pipelines With Multimode• シェルスクリプトによる複数処理の走らせ方• $ for i in {1..10}; do  echo "create-local-instance server${i}"; done ¦ asadmin #glassfishjp
  • 10. #4 Using the AS_DEBUG env Variable• クライアントサイドのデバッグ出力• コマンドプロセスの詳細を得られる • http://localhost:4848/__asadmin/uptime• $ export AS_DEBUG=true $ asadmin uptime CLASSPATH= ./bin/../glassfish/modules/admin-cli.jar Commands: [uptime] asadmin extension directory: /opt/glassfish-3.1.2.2-ml/glassfish/lib/asadmin : ------- RAW RESPONSE --------- PROCESSING MANIFEST... doHttpCommand succeeds 上へ29秒 コマンドuptimeは正常に実行されました。 #glassfishjp
  • 11. #5 The AS_LOGFILE Environment Variable• 動作中の(multimodeも含む)asadminコマン ド履歴をログファイルに保存する• $ export AS_LOGFILE=/tmp/as.log $ (適当にasadminのコマンドを実行する) $ cat /tmp/as.log 12/06/2012 20:07:12 EXIT: 0 asadmin login 12/06/2012 20:07:12 EXIT: 0 asadmin uptime 12/06/2012 20:07:23 EXIT: 0 asadmin list-clusters 12/06/2012 20:07:23 EXIT: 0 asadmin list-clusters 12/06/2012 20:07:23 EXIT: 0 asadmin multimode #glassfishjp
  • 12. #8 asadmin Command Help• asadmin はヘルプが充実している• $ asadmin list-commands **********ローカル・コマンド********** backup-domain change-admin-password change-master-password : **********リモート・コマンド********** add-library disable-secure-admin-principal add-resources enable : #glassfishjp
  • 13. #8 asadmin Command Help• $ asadmin start コマンドstartが見つかりません。 コマンド名の入力を確認してください。このコマンドは、インストー ルされていないパッケージによって提供される可能性があります。 最も一致するローカルおよびリモート・コマンド: restart-domain restart-instance restart-local-instance start-cluster : #glassfishjp
  • 14. #8 asadmin Command Help• $ asadmin help enable-secure-admin ENABLE-SECURE-ADMI(1) ENABLE-SECURE-ADMI(1) 名前 enable-secure-admin - セキュリティ保護された管理を有効にし(まだ有効になってい ない場合)、オプションで、DASからインスタンスへの管理メッセー ジに使用する別名、またはインスタンスからDASへの管理メッセー ジに使用する別名を変更 します。 概要 enable-secure-admin [--help] [--adminalias=alias] [--instancealias=alias] : #glassfishjp
  • 15. #31 - #34 RESTに関するTips• RESTは蓮沼さんの資料があるのでそちらを!• http://www.slideshare.net/btnrouge/ glassfish-rest #glassfishjp
  • 16. インストール&セットアップ関連Tips #glassfishjp
  • 17. #35 Using Domain Templates• カスタマイズしたドメインを作成するときに はテンプレートを利用しよう• テンプレートは <InstallDir>/glassfish/lib/ templates/ にある。 $ cd <InstallDir>/glassfish/lib/templates/ $ cp domain.xml mydomain.xml mydomain.xmlを編集してカスタマイズする• $ asadmin create-domain --template mydomain.xml mynewdomain #glassfishjp
  • 18. #35 Using Domain Templates• $ asadmin verify-domain-xml mynewdomain テストがすべて成功しました。domain.xmlは有 効です。 #glassfishjp
  • 19. #37 Backup and Restore Domain• ドメインのバックアップ/復元• $ asadmin backup-domain/restore- domain/list-backups• OSS版はドメイン停止する必要がある。 Oracle版はsuspend-domainコマンドで一時 停止させる必要がある。• バックアップの削除は保存しているファイル を消す。(デフォルトはglassfish/domains/ domain1/backups) #glassfishjp
  • 20. #37 Backup and Restore Domain• 自動化は、有償版(Oracle GlassFish Server) に準備されている。• $ asadmin (create¦delete)-backup-config• $ asadmin (create¦delete)-schedule ※ cron-based schedule• OS版は止める必要があるので自動化の恩恵が 薄い #glassfishjp
  • 21. デプロイ関連Tips #glassfishjp
  • 22. #10 Configure Log4J• Log4Jを全体的に有効にする方法 • $ cp somewhere/log4j.jar glassfish/lib $ cp somewhere/log4j.properties glassfish/domains/domain1/config/ • $ asadmin create-jvm-option - Dlog4j.configuration=file¥¥://$ {com.sun.aas.instanceRoot}/config/ log4j.properties • $ asadmin restart-domain #glassfishjp
  • 23. #10 Configure Log4J• アプリごとに有効にする場合 • $ cp somewhere/log4j.jar WEB-INF/ classes • もしくは ejb-beans.jar の直下に配置する #glassfishjp
  • 24. #19 Application Versioning• アプリケーションのバージョニング。同アプ リの複数のバージョンが同時に起動しないよ うに管理する(upgrade/rollback)。• $ asadmin deploy --name=AppName:RC1 -- enable=false myApp.war $ asadmin enable AppName:RC1 $ asadmin undeploy AppName:Beta*• $ asadmin deploy --name AppName:RC1 --retire- timeout=3600 myApp.war #glassfishjp
  • 25. #20 Application Scoped Resources• JDBCやResource Adapter、JavaMail等の リソースをアプリケーションスコープで定義し たい場合は、リソース定義をWEB-INF内の glassfish.resources.xmlに記述する。 #glassfishjp
  • 26. #20 Application Scoped Resources• <?xml version="1.0" encoding="UTF-8"?> <resources> <jdbc-resource enabled="true" jndi-name="jdbc/ myDatasource" object-type="user" pool-name="myConnectionPool"> <description/> </jdbc-resource> </resources>• $ asadmin redeploy --properties preserveAppScopedResources=true MyApp.ear #glassfishjp
  • 27. #30 Remote Deployment in NetBeans• リモートサーバを利用した開発方法 • セキュリティの#9で説明したSecure Administrationを有効にする。 • ライブラリとして開発環境にもGlassFishが必要。 • 開発/デプロイ/デバッグは可能。それ以外の機能 (Deploy-on-Save)は利用不可能。 • NetBeansの設定方法は、通常のサーバ登録の最後の ステップで、リモートドメインを登録を選択するだ け。 #glassfishjp
  • 28. セキュリテリ関連Tips #glassfishjp
  • 29. #9 Secure Administration• リモート管理権限はデフォルトではオフに なっている• 管理パスワードは以下で変更できる。空パス ワードはダメ。• $ asadmin change-admin-password #glassfishjp
  • 30. #9 Secure Administration• リモート管理権限、ドメイン内のDASとイン スタンスで相互通信の暗号化を有効にするに は以下の通り(DASとインスタンスを再起動す る必要あり)• $ asadmin enable-secure-admin • 豊富な機能があるので是非 asadmin help enable-secure-admin を読みましょう。 #glassfishjp
  • 31. #9 Secure Administration• Secure Administrationを無効にするには • $ asadmin disable-secure-admin #glassfishjp
  • 32. #11 Using Password Aliases• パスワードの別名(alias)の定義の仕方。 • DB/JMS/etcで使い分ける時に便利。• <InstallDir>/glassfish/domains/domain1/ config/domain.xml • <property name="password" value="secret_p@assword"/>• この方法は当然ながらべた書きになるので(社 会的に)死ぬときがある #glassfishjp
  • 33. #11 Using Password Aliases• domain.xmlに書く以外には… • $ asadmin create-password-alias DB_password_alias エイリアス・パスワード を入力してください> エイリアス・パスワード をもう一度入力してください> コマンド create-password-alias は正常に実行されました。 #glassfishjp
  • 34. 監視関連Tips #glassfishjp
  • 35. #22 How To Enable Server Monitoring• 監視には結構いいのを揃えている。(CLI, REST, JMX access, Web Console)。• 監視レベルは、LOW/HIGH/OFFの三つ。 • デフォルトではオフになっているが、再起 動することなくオンにできる。 #glassfishjp
  • 36. #22 How To Enable Server Monitoring• 例:すべての監視データを取得 • $ asadmin get -m "*" $ asadmin get --monitor "*" 報告する監視データがありません。• 例:Web Container on the DAS を監視 • $ asadmin enable-monitoring --modules web-container=HIGH #glassfishjp
  • 37. #22 How To Enable Server Monitoring• 例:EHB Cointainer on cluster(c1)を監視 • $ asadmin enable-monitoring --target c1 --modules ejb-countainer=LOW #glassfishjp
  • 38. #22 How To Enable Server Monitoring• モジュール名とそれぞれの監視レベルは以下 のコマンドで確認できる • $ asadmin get server.monitoring- service.* server.monitoring-service.dtrace-enabled=false server.monitoring-service.mbean-enabled=true server.monitoring-service.monitoring-enabled=true :• 正直、モジュール名を打つのが面倒なのでGUI(管理コンソール)から やった方が早い。 #glassfishjp
  • 39. #22 How To Enable Server Monitoring #glassfishjp
  • 40. #23 How To View Monitoring Data (CLI)• コマンドラインで監視データを取得する方法• 監視データは以下によって変更される階層木 構造である。• どのモジュールがロードされているか• どのモジュールが監視中(monitoring- enabled)になっているか• デプロイされているアプリケーション #glassfishjp
  • 41. #23 How To View Monitoring Data (CLI)• 監視データの例• server.applications ¦--- application1 ¦ ¦--- ejb-module-1 ¦ ¦ ¦--- ejb1 * ¦ ¦ ¦--- bean-cache (for entity/sfsb) #glassfishjp
  • 42. #23 How To View Monitoring Data (CLI)• 例:JVMのベンダー確認 • $ asadmin get -m "server.jvm.runtime.vmvendor-current- current" • server.jvm.runtime.vmvendor-current- current = Oracle Corporation #glassfishjp
  • 43. #23 How To View Monitoring Data (CLI)• 例:ヒープ使用量 • $ asadmin get -m "server.jvm.memory.usedheapsize*" server.jvm.memory.dotted-name = server.jvm.memory server.jvm.memory.usedheapsize-count-count = 95042176 server.jvm.memory.usedheapsize-count-description = Amount of used memory in bytes server.jvm.memory.usedheapsize-count-lastsampletime = 1355317444825 server.jvm.memory.usedheapsize-count-name = UsedHeapSize server.jvm.memory.usedheapsize-count-starttime = 1355317091175 #glassfishjp
  • 44. #23 How To View Monitoring Data (CLI)• 例:デプロイしているアプリケーションのア クティブセッション数• $ asadmin get -m "server.applications.mywebapp.server.ac tivesessionscurrent-current" server.applications.mywebapp.server.activesessionscurrent- current = 5 #glassfishjp
  • 45. #24 Using the monitor Command• コマンドによる監視方法• $ asadmin monitor --interval 5 --type jvm server JVM 監視 UpTime(ミリ秒) ヒープメモリーおよびヒープでないメモリー (バイト) 現在の値 最小 最大 低 高 カウント 1345760 67276800 753860608 0 0 193273856 1350761 67276800 753860608 0 0 193372160 #glassfishjp
  • 46. #24 Using the monitor Command• $ asadmin monitor --interval=5 --type webmodule server asc ast rst st ajlc mjlc tjlc aslc mslc tslc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0• 各凡例の意味はモニター中に h<Enter> を入 力すると説明が出る。 * ajlc = アクティブな JSP ページの数 * * asc = 現在アクティブなセッションの数 * :• 監視できる項目は asadmin help monitor で 確認しよう! #glassfishjp
  • 47. #24 Using JMX to Access Monitoring• JMXを利用して監視する。 • デプロイしてアクセスするとserver.logに以 下の様なメッセージが現れる。 • JMXStartupService has started JMXConnector on JMXService URL service:jmx:rmi://192.168.2.102:8686/jndi/ rmi://192.168.2.102:8686/jmxrmi• このURL(service:を含む)を、jconsoleやjvisualvmの Remote Process等に指定するとリアルタイムで監視 することが可能。 #glassfishjp
  • 48. #39 Tracing SQL Queries• 「このSQLを書いたのは誰だあっ!!」を言 うためにログをとる。• JDBC connection poolで実行されたSQL命 令を追いかける。JPAの使用は問わない。• javax.enterprise.resource.sqltrace のlog level は FINE(default)。• org.glassfish.api.jdbc.SQLTraceListenerを 利用して、SQLTraceRecordオブジェクトを 記録するように実装できる。 #glassfishjp
  • 49. #39 Tracing SQL Queries• $ asadmin set server.resources.jdbc- connection-pool.DerbyPool.sql-trace- listeners=MyListener• Query実行時のMethod名などを吐くことが できる。 詳細はAPI参照。 #glassfishjp
  • 50. #39 Tracing SQL Queries• M分間隔で上位N位の高頻度で実行されている SQL命令をレポートする。MとNは以下の通 りに指定する。• $ asadmin set server.resources.jdbc-connection- pool.<POOL_NAME>.property.time-to-keep-queries-in- minutes=10• $ asadmin set server.resources.jdbc-connection- pool.<POOL_NAME>.property.number-of-top-queries-to- report=15 #glassfishjp
  • 51. #40 Detecting JDBC statement and connections leaks and reclaim• JDBC statementのタイムアウトとclose漏れ (connection leakage)を検出する• $ asadmin set server.resources.jdbc-connection- pool.DerbyPool.xxx=VALUE• xxx=VALUE : • connection-leak-timeout-in-seconds="10" • statement-timeout-in-seconds="6" • statement-leak-timeout-in-seconds="2" • connection-leak-reclaim= true • statement-leak-reclaim= true #glassfishjp
  • 52. #40 Detecting JDBC statement and connections leaks and reclaim• 設定後、サーバ再起動が必要。close漏れの可能性があ る場合、デプロイ時に以下のようなメッセージが出る• WARNING: A potential statement leak detected for connection pool DerbyPool. The stack trace of the thread is provided below :   com.sun.gjc.spi.base.StatementWrapper. (StatementWrapper.java:81)   :   com.mypackage.MyTestBean.execute(TestBean.java:00) #glassfishjp
  • 53. 更新(Update)関連Tips #glassfishjp
  • 54. #41 Using Update Center to Keep Current• Update Centerを使ってネットワークリポジトリから 更新する • <InstallDir>/bin/pkg • $ pkg list -u で更新保留中のパッケージが解る • $ pkg image-update でGlassFishをアップデー トできる • > You are running on a 64 bit Linux distribution and the 32 bit Linux compatibility libraries do not appear to be installed. • oh... #glassfishjp
  • 55. #41 Using Update Center to Keep Current• pkg のコアな使い方は以下を参照! • http://www.coppermine.jp/docs/programming/ 2012/12/glassfish-internals.html • @btnrougeさんのサイト• Web Profiler, Full Profiler以外の俺俺Profilerも作れる #glassfishjp
  • 56. #42 Update Center GUI Simplifies Updates• シンプルなGUIでUpdate Centerを使える。 • <InstallDir>/bin/updatetool • もしくは、notifierがGlassFishインストー ル時にインストールされる。 #glassfishjp
  • 57. #46 Upgrading to a Newer Version• GlassFishのバージョンの更新方法• 二通りある • Side-by-side: • <InstallDir>/glassfish/bin/asupgrade --c • Web管理コンソール • In-place: • <InstallDir>/bin/pkg image-update • <InstallDir>/bin/updatetool #glassfishjp
  • 58. #47 Upgrade from Open Source to Commercial• 有料版へ移行する方法 • OS版のリポジトリを削除する • $ pkg unset-publisher dev.glassfish.org stable.glassfish.orag release.javaeesdk.oracle.com• 有料版のリポジトリを追加する • $ pkg set-publisher -P -O http://pkg.oracle.com/ glassfish/v3/release release.glassfish.oracle.com • $ pkg set-publisher -O http://pkg.oracle.com/glassfish/ v3/dev dev.glassfish.oracle.com #glassfishjp
  • 59. #47 Upgrade from Open Source to Commercial• アドオンをインストールする • $ pkg install glassfish-enterprise-(web¦full)-profiler #glassfishjp
  • 60. #48 Extending and Updating Inside a Closed Network• 閉域網での更新方法 • pre-installed toolkit imageとstarter repositoryを インストールする。 • support.oracle.comからリポジトリをDownloadす る(zipファイル) • ローカルリポジトリデーモンを起動する • $ pkg.depotd -d <Directory> -p <Port> • ローカルリポジトリを設定する • $ pkg -R <GlassFish> set-publisher -Pe -O http:// <mylocalhost>:<port> <publisher> #glassfishjp
  • 61. JVM関連Tips #glassfishjp
  • 62. #29 What s in your JVM ? - Troubleshoot• トラブルシュートに役立つあれこれ• Server thread dumpの取り方 • $ asadmin generate-jvm-report --type=thread¦ class¦memory¦summary(default)¦log • 日本語で出てくるのでthreadがおすすめ。• JVM Command Line Tools • jps / jstack / jstat / jinfo / jmap / jhat • GlassFish関係なかった。 #glassfishjp
  • 63. #44 Controlling the Servers JVM• 起動時、どのようにJVMを選択? 1. domain.xmlの<java-config>に記載された java-home 2. AS_JAVA(glassfish/config/asenv.conf) 3. JAVA_HOME (環境変数) 4. java.home (asadminを実行しているJVM のシステムプロパティ) #glassfishjp
  • 64. #45 Controlling the JVM Options• JVM Optionの設定方法 • domain.xmlの<java-config>は複数箇所で 記述されている(default-config, server- config, cluster1-config)ので猥雑。CLIか ら設定しよう。 • $ asadmin (list¦create¦delete)-jvm- options --target <server,cluser- name,instance-name> <JVM Option> • サーバーの再起動の必要はない。 #glassfishjp
  • 65. その他のTips #glassfishjp
  • 66. #36 GlassFish Hosting Providers • #ステマ #glassfishjp
  • 67. #49 GlassFish Docs• http://docs.oracle.com/cd/E26576_01/index.htm• http://dlc.sun.com.edgesuite.net/glassfish/3.1.2/release/ glassfish-ose-3.1.2-docs-pdf.zip• 日本語の公式サイト (http://glassfish.java.net/ja/)は 古いから気を付けよう! • いまだに2.1.1がトップにある。(そして現 役。) #glassfishjp
  • 68. #50 How to reach us?• GlassFish Forum: • http://www.java.net/forums/glassfish/ glassfish• users@glassfish.java.net #glassfishjp
  • 69. Finish!• Thank You for Listing! #glassfishjp

×