未分類

CentOS7とJavaの性能検証用環境の構築(その4:Java Servlet構築編)

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の性能検証用環境の構築

  1. その1:概要編
  2. その2:CentOS構築編
  3. その3:Glassfish構築編
  4. その4:Java Servlet構築編 (★★★この記事★★★)
  5. その5:Jmeter設定編
  6. その6:性能計測編
ABOUT ME
kash
エンジニア歴5年目くらい。金融系の業務システムの構築を担っているが、内心はtoC系のシステム構築にかかわるビジネスに携わってみたいと思っている。自分で何かしらのサービスを作ってみよう活動を実施中。バイクが好き。