Java servletの構築
今回利用するサンプルモジュールは以下です。
こちらをサンプルとしている本のリンクは後日記載しますね。
https://github.com/ScottOaks/JavaPerformanceTuning
ざっくり手順としては以下の通りとなります。
①Gitからサンプルモジュールを取得する。
②サンプルモジュールをAntでコンパイル、ビルドする。
(サンプルでAntを強いられているため。。。)
## ①Gitからサンプルモジュールを取得する。
## gitをインストールしておく。
[root@localhost ~]# yum install git
:
[root@localhost ~]# git --version
git version 1.8.3.1
[root@localhost ~]# su glassfish
[glassfish@localhost root]$ cd ~
[glassfish@localhost ~]$ pwd
/home/glassfish
[glassfish@localhost ~]$ mkdir workspace
[glassfish@localhost ~]$ cd workspace
[glassfish@localhost workspace]$ git clone https://github.com/ScottOaks/JavaPerformanceTuning.git
Cloning into 'JavaPerformanceTuning'...
remote: Enumerating objects: 362, done.
remote: Counting objects: 100% (362/362), done.
remote: Compressing objects: 100% (149/149), done.
remote: Total 662 (delta 75), reused 333 (delta 66), pack-reused 300
Receiving objects: 100% (662/662), 2.79 MiB | 191.00 KiB/s, done.
Resolving deltas: 100% (138/138), done.
[glassfish@localhost workspace]$ ll
合計 0
drwxrwxr-x. 5 glassfish glassfish 59 9月 5 23:38 JavaPerformanceTuning
## ②サンプルモジュールをAntでコンパイル、ビルドする。
## antをインストールしておく。
[glassfish@localhost workspace]# exit
[root@localhost workspace]# yum install ant
:
インストール:
ant.noarch 0:1.9.4-2.el7
依存性関連をインストールしました:
java-1.8.0-openjdk-devel.x86_64 1:1.8.0.262.b10-0.el7_8
完了しました!
[root@localhost workspace]# ant -version
Apache Ant(TM) version 1.9.4 compiled on November 5 2018
## 対象のモジュールをビルドするためのパスを設定しておく。
## (対象モジュールのREADMEに必要なパスが書いてありました。)
## (ログインするたびに実行が必要な設定の仕方です。)
[glassfish@localhost workspace]$ su glassfish
[glassfish@localhost workspace]$ export JAVAX_PERSISTENCE=/opt/glassfish5/glassfish/modules/javax.persistence.jar
[glassfish@localhost workspace]$ export JAVAX_EJB=/opt/glassfish5/glassfish/modules/javax.ejb-api.jar
[glassfish@localhost workspace]$ export JAVAX_SERVLET=/opt/glassfish5/glassfish/modules/javax.servlet-api.jar
## 一応おまじないでJAVA_HOMEを再設定しておく。。
[glassfish@localhost StockEar]$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64
## 今回ビルドするStockEarのディレクトリに移動する。
[glassfish@localhost workspace]$ cd /home/glassfish/workspace/JavaPerformanceTuning/FirstEdition/StockEar
## Ant実行してコンパイル・ビルドする。
[glassfish@localhost StockEar]$ ant ear
Buildfile: /home/glassfish/workspace/JavaPerformanceTuning/FirstEdition/StockEar/build.xml
: (警告出ても無視で大丈夫)
BUILD SUCCESSFUL
Total time: 3 seconds
後でほかのユーザーでこのモジュールを扱いたいので、誰でも操作できるように権限を変更しといちゃいましょう。
[glassfish@localhost bin]$ cd ~
[glassfish@localhost ~]$ ll
合計 0
drwxrwxr-x. 3 glassfish glassfish 35 9月 5 23:38 workspace
[glassfish@localhost ~]$ chmod 777 -R ./
[glassfish@localhost ~]$ ll
合計 0
drwxrwxrwx. 3 glassfish glassfish 35 9月 5 23:38 workspace
アプリケーションのDeploy
①GlassfishでJVMパラメータを変更する。
②Glassfishのコンソール画面からDeployを行う。
③起動モジュールの確認。
①GlassfishでJVMパラメータを変更する。
## 設定の簡単な紹介。
## "-DMockEntityManager=MockEntityManager":StockEarを動かすためのJVMパラメータを設定。
## "-XX\:+PreserveFramePointer":プロファイル時にjavaメソッドを表示するため。
## "-XX\:-Inline":後のperfでjavaの実行をちゃんとトレースするための設定。
## "-Xmx2048m":512mだと、こころもとない。。
## "-XX\:+UseG1GC":デフォルトのフルGC型よりもハングしにくくなる。
[glassfish@localhost bin]$ ./asadmin create-jvm-options "-DMockEntityManager=MockEntityManager":"-XX\:+PreserveFramePointer":"-XX\:-Inline":"-Xmx2048m":"-XX\:+UseG1GC"
Enter admin user name> admin
Enter admin password for user "admin"> ←パスワードを入力
Created 5 option(s)
The configuration already has maximum heap size specified: -Xmx512m. Verify the java configuration by doing list-jvm-options.
Command create-jvm-options executed successfully.
## Glassfishを再起動する。
[glassfish@localhost bin]$ ./asadmin stop-domain
Waiting for the domain to stop .
Command stop-domain executed successfully.
[glassfish@localhost bin]$ ./asadmin start-domain
Waiting for domain1 to start .......
Successfully started the domain : domain1
domain Location: /opt/glassfish5/glassfish/domains/domain1
Log File: /opt/glassfish5/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.
②Glassfishのコンソール画面からDeployを行う。
Glassfishバグに遭遇したのだ。。
今回使用するモジュールはDBアクセスのふるまいがあるものなので、Databaseを定義・起動しておきます。実際はソース内のモックが動くので、DBの中身とかは気にしなくて大丈夫です。
(Databaseに関する操作はサンプルモジュールの制約によるものです。)
Databaseの定義は以下のイメージです。

Databaseを起動します。
[glassfish@localhost bin]$ pwd
/opt/glassfish5/bin
[glassfish@localhost bin]$ ./asadmin start-database
Starting database in Network Server mode on host 0.0.0.0 and port 1527.
:
Starting database in the background.
Log redirected to /opt/glassfish5/glassfish/databases/derby.log.
Command start-database executed successfully.
Glassfishにログインして、下記の通り、Deploy画面に遷移します。

その後普通に作成したearファイルを選択すればよいと思いますが、
実際にやってみるとこんなエラーが出てしまいます。

管理者画面のバグらしいです。以下のように力業で解決しちゃいます。
運用するのであれば、GUIからではなく、CLIからやったほうがよさそうですね~

Deployが完了したら、「http://localhost:8080/StockEar-war/StockServlet」にアクセスできるようになります。

CentOSからはこのアプリケーションにアクセスできるようになりました。
これから性能検証を行う上で、windows10からもアクセスできるようにしたいです。
そのためにはCentOSのFirewallで、8080番ポートのhttpアクセスを許可する必要があります。
## httpアクセスを永久に許可する。
[root@localhost ~]# firewall-cmd --permanent --zone public --add-service http
success
## 8080番ポートへのアクセスを許可する。
[root@localhost ~]# firewall-cmd --permanent --zone public --add-port 8080/tcp
success
## 設定を反映させる。
[root@localhost ~]# firewall-cmd --reload
success
これで外部からのhttpアクセスもできるようになりました。
ただし、windows10からアクセスする際はlocalhostではログインできません。CentOSのIPアドレスで置き換えなければいけません。
CentOSのIPアドレスは、CentOSの構築時に実行した「ip a」に書かれています。
今回では以下のURLでアクセスできるようになりますね。
http://192.168.56.104:8080/StockEar-war/StockServlet
CentOS7とJavaの性能検証用環境の構築