Contenu connexe Similaire à 29 Tips in 40 Minitues for GlassFish Fans #glassfishjp (20) 29 Tips in 40 Minitues for GlassFish Fans #glassfishjp1. 50 Tips in 50 Minutes for
GlassFish Fans
KUBOTA Yuji (@sugarlife)
#glassfishjp
2. 29 40
50 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
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
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
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
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
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
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
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
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 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
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
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