29 tips in 40 minitues for glassfish fans #glassfishjp
DESCRIPTION
29 Tips in 40 Minitues for GlassFish Fans #glassfishjp GlassFish Users Group Japan 勉強会 Winter 2012 w/大忘年会 http://atnd.org/events/32722TRANSCRIPT
#glassfishjp
50 Tips in 50 Minutes forGlassFish Fans
KUBOTA Yuji (@sugarlife)
#glassfishjp
#glassfishjp
50 Tips in 50 Minutes forGlassFish Fans
KUBOTA Yuji (@sugarlife)
#glassfishjp
29 40
#glassfishjp
自己紹介
• KUBOTA Yuji (@sugarlife)
• 難聴者
• 通信インフラ系企業
• トラブルシューター / Java EE
• JVM (主にGC) 好き
#glassfishjp
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
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
管理コンソール関連Tips
#glassfishjp
#1 Using the login Command
• リモート管理すると毎回 username/passwordを聞かれるが、login commandを使うと格納され、以降はこれを利用して(複数)サーバにアクセスする場合に回避できる。
• $ asadmin --host ouch loginusername / password が尋ねられ、入力すると .asadminpass に格納される。
• $ asadmin --host ouch list-clustersc1 not running
#glassfishjp
#2 Use Multimode for Batch Processing
• 複数バッチ処理の走らせ方
• $ cat ./batchfile.txtcreate-cluster c1create-local-instance --cluster c1 i1create-local-instance --cluster c1 i2
• $ asadmin --terse(-t) --user admin multimode --file ./batchfile.txt
• 途中で終了させる場合はバッチを落とす(exit/quit/Ctrl-D/Ctrl-Z)
#glassfishjp
#3 Use Shell Pipelines With Multimode
• シェルスクリプトによる複数処理の走らせ方
• $ for i in {1..10}; do echo "create-local-instance server${i}"; done | asadmin
#glassfishjp
#4 Using the AS_DEBUG env Variable
• クライアントサイドのデバッグ出力
• コマンドプロセスの詳細を得られる
• http://localhost:4848/__asadmin/uptime
• $ export AS_DEBUG=true$ asadmin uptimeCLASSPATH= ./bin/../glassfish/modules/admin-cli.jarCommands: [uptime]asadmin extension directory: /opt/glassfish-3.1.2.2-ml/glassfish/lib/asadmin :------- RAW RESPONSE ---------PROCESSING MANIFEST...doHttpCommand succeeds上へ29秒コマンドuptimeは正常に実行されました。
#glassfishjp
#5 The AS_LOGFILE Environment Variable
• 動作中の(multimodeも含む)asadminコマンド履歴をログファイルに保存する
• $ export AS_LOGFILE=/tmp/as.log$ (適当にasadminのコマンドを実行する)$ cat /tmp/as.log12/06/2012 20:07:12 EXIT: 0 asadmin login12/06/2012 20:07:12 EXIT: 0 asadmin uptime12/06/2012 20:07:23 EXIT: 0 asadmin list-clusters12/06/2012 20:07:23 EXIT: 0 asadmin list-clusters12/06/2012 20:07:23 EXIT: 0 asadmin multimode
#glassfishjp
#8 asadmin Command Help
• asadmin はヘルプが充実している
• $ asadmin list-commands**********ローカル・コマンド**********backup-domainchange-admin-passwordchange-master-password :**********リモート・コマンド**********add-library disable-secure-admin-principaladd-resources enable :
#glassfishjp
#8 asadmin Command Help
• $ asadmin startコマンドstartが見つかりません。コマンド名の入力を確認してください。このコマンドは、インストールされていないパッケージによって提供される可能性があります。最も一致するローカルおよびリモート・コマンド: restart-domain restart-instance restart-local-instance start-cluster :
#glassfishjp
#8 asadmin Command Help
• $ asadmin help enable-secure-adminENABLE-SECURE-ADMI(1) ENABLE-SECURE-ADMI(1)名前 enable-secure-admin - セキュリティ保護された管理を有効にし(まだ有効になっていない場合)、オプションで、DASからインスタンスへの管理メッセージに使用する別名、またはインスタンスからDASへの管理メッセージに使用する別名を変更 します。
概要 enable-secure-admin [--help] [--adminalias=alias] [--instancealias=alias]:
#glassfishjp
#31 - #34 RESTに関するTips
• RESTは蓮沼さんの資料があるのでそちらを!
• http://www.slideshare.net/btnrouge/glassfish-rest
#glassfishjp
インストール&セットアップ関連Tips
#glassfishjp
#35 Using Domain Templates
• カスタマイズしたドメインを作成するときにはテンプレートを利用しよう
• テンプレートは <InstallDir>/glassfish/lib/templates/ にある。$ cd <InstallDir>/glassfish/lib/templates/$ cp domain.xml mydomain.xmlmydomain.xmlを編集してカスタマイズする
• $ asadmin create-domain --template mydomain.xml mynewdomain
#glassfishjp
#35 Using Domain Templates
• $ asadmin verify-domain-xml mynewdomainテストがすべて成功しました。domain.xmlは有効です。
#glassfishjp
#37 Backup and Restore Domain
• ドメインのバックアップ/復元
• $ asadmin backup-domain/restore-domain/list-backups
• OSS版はドメイン停止する必要がある。Oracle版はsuspend-domainコマンドで一時停止させる必要がある。
• バックアップの削除は保存しているファイルを消す。(デフォルトはglassfish/domains/domain1/backups)
#glassfishjp
#37 Backup and Restore Domain
• 自動化は、有償版(Oracle GlassFish Server)に準備されている。
• $ asadmin (create|delete)-backup-config
• $ asadmin (create|delete)-schedule※ cron-based schedule
• OS版は止める必要があるので自動化の恩恵が薄い
#glassfishjp
デプロイ関連Tips
#glassfishjp
#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
#10 Configure Log4J
• アプリごとに有効にする場合
• $ cp somewhere/log4j.jar WEB-INF/classes
• もしくは ejb-beans.jar の直下に配置する
#glassfishjp
#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
#20 Application Scoped Resources
• JDBCやResource Adapter、JavaMail等のリソースをアプリケーションスコープで定義したい場合は、リソース定義をWEB-INF内のglassfish.resources.xmlに記述する。
#glassfishjp
#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
#30 Remote Deployment in NetBeans
• リモートサーバを利用した開発方法
• セキュリティの#9で説明したSecure Administrationを有効にする。
• ライブラリとして開発環境にもGlassFishが必要。
• 開発/デプロイ/デバッグは可能。それ以外の機能(Deploy-on-Save)は利用不可能。
• NetBeansの設定方法は、通常のサーバ登録の最後のステップで、リモートドメインを登録を選択するだけ。
#glassfishjp
セキュリテリ関連Tips
#glassfishjp
#9 Secure Administration
• リモート管理権限はデフォルトではオフになっている
• 管理パスワードは以下で変更できる。空パスワードはダメ。
• $ asadmin change-admin-password
#glassfishjp
#9 Secure Administration
• リモート管理権限、ドメイン内のDASとインスタンスで相互通信の暗号化を有効にするには以下の通り(DASとインスタンスを再起動する必要あり)
• $ asadmin enable-secure-admin
• 豊富な機能があるので是非 asadmin help enable-secure-admin を読みましょう。
#glassfishjp
#9 Secure Administration
• Secure Administrationを無効にするには
• $ asadmin disable-secure-admin
#glassfishjp
#11 Using Password Aliases
• パスワードの別名(alias)の定義の仕方。
• DB/JMS/etcで使い分ける時に便利。
• <InstallDir>/glassfish/domains/domain1/config/domain.xml
• <property name="password" value="secret_p@assword"/>
• この方法は当然ながらべた書きになるので(社会的に)死ぬときがある
#glassfishjp
#11 Using Password Aliases
• domain.xmlに書く以外には…
• $ asadmin create-password-alias DB_password_aliasエイリアス・パスワード を入力してください>エイリアス・パスワード をもう一度入力してください>コマンド create-password-alias は正常に実行されました。
#glassfishjp
監視関連Tips
#glassfishjp
#22 How To Enable Server Monitoring
• 監視には結構いいのを揃えている。(CLI, REST, JMX access, Web Console)。
• 監視レベルは、LOW/HIGH/OFFの三つ。
• デフォルトではオフになっているが、再起動することなくオンにできる。
#glassfishjp
#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
#22 How To Enable Server Monitoring
• 例:EHB Cointainer on cluster(c1)を監視
• $ asadmin enable-monitoring --target c1 --modules ejb-countainer=LOW
#glassfishjp
#22 How To Enable Server Monitoring
• モジュール名とそれぞれの監視レベルは以下のコマンドで確認できる
• $ asadmin get server.monitoring-service.*server.monitoring-service.dtrace-enabled=falseserver.monitoring-service.mbean-enabled=trueserver.monitoring-service.monitoring-enabled=true :
• 正直、モジュール名を打つのが面倒なのでGUI(管理コンソール)からやった方が早い。
#glassfishjp
#22 How To Enable Server Monitoring
#glassfishjp
#23 How To View Monitoring Data (CLI)
• コマンドラインで監視データを取得する方法
• 監視データは以下によって変更される階層木構造である。
• どのモジュールがロードされているか
• どのモジュールが監視中(monitoring-enabled)になっているか
• デプロイされているアプリケーション
#glassfishjp
#23 How To View Monitoring Data (CLI)
• 監視データの例
• server.applications |--- application1 | |--- ejb-module-1 | | |--- ejb1 * | | |--- bean-cache (for entity/sfsb)
#glassfishjp
#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
#23 How To View Monitoring Data (CLI)
• 例:ヒープ使用量
• $ asadmin get -m "server.jvm.memory.usedheapsize*"server.jvm.memory.dotted-name = server.jvm.memoryserver.jvm.memory.usedheapsize-count-count = 95042176server.jvm.memory.usedheapsize-count-description = Amount of used memory in bytesserver.jvm.memory.usedheapsize-count-lastsampletime = 1355317444825server.jvm.memory.usedheapsize-count-name = UsedHeapSizeserver.jvm.memory.usedheapsize-count-starttime = 1355317091175
#glassfishjp
#23 How To View Monitoring Data (CLI)
• 例:デプロイしているアプリケーションのアクティブセッション数
• $ asadmin get -m "server.applications.mywebapp.server.activesessionscurrent-current"server.applications.mywebapp.server.activesessionscurrent-current = 5
#glassfishjp
#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
#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
#24 Using JMX to Access Monitoring
• JMXを利用して監視する。
• デプロイしてアクセスするとserver.logに以下の様なメッセージが現れる。
• JMXStartupService has started JMXConnector on JMXService URLservice:jmx:rmi://192.168.2.102:8686/jndi/rmi://192.168.2.102:8686/jmxrmi
• このURL(service:を含む)を、jconsoleやjvisualvmのRemote Process等に指定するとリアルタイムで監視することが可能。
#glassfishjp
#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
#39 Tracing SQL Queries
• $ asadmin set server.resources.jdbc-connection-pool.DerbyPool.sql-trace-listeners=MyListener
• Query実行時のMethod名などを吐くことができる。 詳細はAPI参照。
#glassfishjp
#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
#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
#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
更新(Update)関連Tips
#glassfishjp
#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
#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
#42 Update Center GUI Simplifies Updates
• シンプルなGUIでUpdate Centerを使える。
• <InstallDir>/bin/updatetool
• もしくは、notifierがGlassFishインストール時にインストールされる。
#glassfishjp
#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
#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
#47 Upgrade from Open Source to Commercial
• アドオンをインストールする
• $ pkg install glassfish-enterprise-(web|full)-profiler
#glassfishjp
#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
JVM関連Tips
#glassfishjp
#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
#44 Controlling the Server's 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
#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
その他のTips
#glassfishjp
#36 GlassFish Hosting Providers
• #ステマ
#glassfishjp
#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
#50 How to reach us?
• GlassFish Forum:
• http://www.java.net/forums/glassfish/glassfish
#glassfishjp
Finish!
• Thank You for Listing!