JBOSS配置排錯-創(chuàng)新互聯(lián)

jboss提供了二種運行模式:standalone(獨立運行模式)、domain(域模式),日常開發(fā)中,使用standalone模式足已;但生產(chǎn)部署時,一個app,往往是部署在jboss集群環(huán)境中的,如果所有jboss server均采用standalone模式,會給運維帶來極大的工作量,需要每臺jboss server上逐一部署/更新,顯然不適合。

創(chuàng)新互聯(lián)為您提適合企業(yè)的網(wǎng)站設(shè)計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強的網(wǎng)絡(luò)競爭力!結(jié)合企業(yè)自身,進行網(wǎng)站設(shè)計及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè), 我們的網(wǎng)頁設(shè)計師為您提供的解決方案。

domain模式正是為了解決這一問題,該模式下,所有jbossserver可以劃分成不同的group(注:這里的jbossserver并不一定要對應(yīng)某臺物理機或虛擬機,一個os上,可以同時run多個jboss server實例,所以本文中的jboss server均指某個運行中的jboss server instance),每個group中可以包含多個jboss server,所有這些jboss server中,可以指定一臺做為域控制器(domaincontroller),俗稱master server,其它jbossserver均為Home Controller(俗稱slaveserver)。

master上可以控制所有jboss server,并監(jiān)控其運行情況,部署應(yīng)用時,一個war包,只需要部署到group上,該group中的所有jboss server即會同步自動部署。

操作系統(tǒng):CentOS 7
JDK版本:1.8
JBoss版本:JBoss EAP 6.2
jboss各版本下載地址:https://teddysun.com/260.html

下載jboss-eap-6.2.0.zip

下載jdk包:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下載jdk-8u131-linux-x64.rpm

Centos7無法使用ssh登陸及解決方案

yum instatll net-tools -y   ----安裝netstat工具

systemctl start sshd ---啟動sshd服務(wù)

netstat -nalt

JBoss運行需要依賴于JDK

安裝JDK

檢查系統(tǒng)是否自帶jdk,如果系統(tǒng)自帶jdk,需要先將它卸載掉.然后安裝我們需要的jdk.

檢查是否安裝jdk命令:

rpm-qa | grep jdk

刪除自帶jdk的命令:

rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.41.1.10.4.el6.x86_64

或者用 yum -y remove 命令刪除:

yum -y remove java-1.6.0-openjdk-1.6.0.0-1.41.1.10.4.el6.x86_64

執(zhí)行完后,檢查是否刪除成功:

[root@localhost vmware-tools-distrib]# rpm-qa | grep jdk

[root@localhost vmware-tools-distrib]# java-version

-bash: java: command not found

將安裝包jdk-8u131-linux-x64上傳至服務(wù)器 /home/oldboy/tools目錄下

chmod -R 777/home/oldboy/tools/jdk-8u131-linux-x64.rpm

rpm -ivh/home/oldboy/tools/jdk-8u131-linux-x64.rpm

該命令將jdk默認安裝到了/usr/Java目錄下

mv /usr/java/jdk1.8.0_131 /usr/local/jdk1.8

配置環(huán)境變量

vi /etc/profile

在文件最后配置如下變量

JAVA_HOME=/usr/local/jdk1.8

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

然后輸入source /etc/profile命令,使配置文件生效。

出現(xiàn)如下版本信息,則說明一切安裝配置成功。

[root@localhost vmware-tools-distrib]# java-version

java version "1.8.0_131"

Java(TM) SE Runtime Environment (build1.8.0_131-b11)

Java HotSpot(TM) 64-Bit Server VM (build25.131-b11, mixed mode)

JBoss安裝

將JBoss安裝文件(先解壓成目錄)上傳到服務(wù)器,目錄:/usr/local/software

mkdir -pv /usr/local/software

不需要安裝,解壓即可使用,和Tomcat一樣,下面將JBoss目錄移動到usr/local 下,該目錄為所有軟件安裝目錄。

mv /usr/local/software/jboss-eap-6.2/usr/local/jboss6.2

vi /etc/profile

增加

JBOSS_HOME=/usr/local/jboss6.2

啟動JBoss服務(wù)

啟動之前最好現(xiàn)獲取jboss文件的權(quán)限:

chmod -R 777 /usr/local/jboss6.2

cd /usr/local/jboss6.2/bin

輸入命令 ./standalone.sh 以a single server instance的模式啟動Jboss

能看到類似22:37:31,306INFO [org.jboss.as] (Controller BootThread) JBAS015874: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) started in10490ms - Started 129 of 186 services (56 services are passive or on-demand),說明啟動成功。

/usr/local/jboss6.2/standalone/configuration目錄中有***.xml,是用于jboss啟動類型。比如:./standalone.sh--server-config=standalone-full.xml,

而 ./standalone.sh 相當(dāng)于./standalone.sh --server-config=standalone.xml

cd /usr/local/jboss6.2/bin

輸入命令 ./domain.sh 以allowing control andmanagement of multiple instances的domain模式啟動JBoss

測試:

master: 192.168.1.58;

slave: 192.168.1.181;

配置master(master: 192.168.1.58):

192.168.1.58上添加用戶:

cd /usr/local/jboss6.2/bin

./add-user.sh

創(chuàng)建的用戶名為slave,這樣slave才可以登陸到master。密碼:@we4%7Jt,經(jīng)過Base64加密后為:QHdlNCU3SnQ=

修改管理接口地址:

vi /usr/local/jboss6.2/domain/configuration/host.xml

       <interface name="management">

           <inet-address value="${jboss.bind.address.management:192.168.1.58}"/>

       </interface>

配置slave(slave: 192.168.1.181)

vi /usr/local/jboss6.2/domain/configuration/host.xml

設(shè)置名字:

<host name="slave"xmlns="urn:jboss:domain:1.5">

設(shè)置密碼:

secret value中配置的值是master上配置的slave用戶的密碼的base64。

 <secret value=" QHdlNCU3SnQ="/>

配置master地址:

   <domain-controller>

      <remote host="${jboss.domain.master.address:192.168.1.58}"port="${jboss.domain.master.port:9999}"security-realm="ManagementRealm"/>

   </domain-controller>

配置本地接口地址:

將127.0.0.1都替換成0.0.0.0或?qū)嶋H的IP地址:

   <interfaces>

       <interface name="management">

           <inet-addressvalue="${jboss.bind.address.management:0.0.0.0}"/>

       </interface>

       <interface name="public">

          <inet-address value="${jboss.bind.address:0.0.0.0}"/>

       </interface>

       <interface name="unsecure">

           <!-- Used for IIOP sockets in the standard configuration.

                To secure JacORB you need tosetup SSL -->

           <inet-address value="${jboss.bind.address.unsecure:0.0.0.0}"/>

       </interface>

</interfaces>

配置端口:

       <management-interfaces>

           <native-interface security-realm="ManagementRealm">

               <socketinterface="management"port="${jboss.management.native.port:9099}"/>

           </native-interface>

       </management-interfaces>

這里的9999端口,改成其它不使用的端口(比如:9099),否則slave server上的9999端口,與master server上的管理端口沖突,最后啟動時,會報錯

配置servers:

group必須是master主機(master: 192.168.1.58)上host.xml中配置的group。

<servers>

       <server name="server-one"group="main-server-group"/>

       <server name="server-two"group="main-server-group">

           <!-- server-two avoids port conflicts by incrementing the ports in

                the default socket-groupdeclared in the server-group -->

           <socket-bindings port-offset="150"/>

       </server>

   </servers>

啟動

master(master: 192.168.1.58):

cd /usr/local/jboss6.2/bin

./domain.sh

slave(slave: 192.168.1.181):

cd /usr/local/jboss6.2/bin

./domain.sh

局域網(wǎng)訪問管理接口:(用戶名:為slave密碼:@we4%7Jt)

http://192.168.1.58:9990

Deploying an Application in Standalone Mode

將應(yīng)用程序test.war(是隨便找的測試文件)放到 /usr/local/jboss6.2/standalone/deployments

The standalone/deployments directory in the JBoss Application Server

distribution is the location end users can place their deploymentcontent

(e.g. war, ear, jar, sar files) to have it automatically deployed intothe server

runtime.

cd /usr/local/jboss6.2/bin

./standalone.sh

可以看到JBAS018559: Deployed"test.war" (runtime-name : "test.war")就是說明已經(jīng)運用了,/usr/local/jboss6.2/standalone/deployments下刪除test.war可以看到JBAS018558: Undeployed"test.war" (runtime-name: "test.war")

Deploying an Application in Domain Mode

登陸 http://192.168.1.58:9990

Manage Deployments

JBOSS配置排錯

Add

JBOSS配置排錯

JBOSS配置排錯

JBOSS配置排錯

Assign

JBOSS配置排錯

Gathering Java Virtual Machine Diagnostics(GC日志分析,用于排錯)

standalone模式

vi /usr/local/jboss6.2/bin/standalone.conf

#Enable garbage collection logging

JAVA_OPTS="$JAVA_OPTS -verbose:gc-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:gc.log"

#Create a java heap dump on outofmerryerror

JAVA_OPTS="$JAVA_OPTS-XX:-HeapDumpOnOutOfMemoryError"

/usr/local/jboss6.2/bin/standalone.sh

生成文件/root/gc.log,可以用來查看。

domain模式

vi /usr/local/jboss6.2/domain/configuration/host.xml

   <jvms>

          <jvm name="default">

           <heap size="64m" max-size="256m"/>

           <permgen size="256m" max-size="256m"/>

             <jvm-options>

                 <optionvalue="-server"/>

               <optionvalue="-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails-Xloggc:gc.log"/>

               <optionvalue="-XX:-HeapDumpOnOutOfMemoryError"/>

             </jvm-options>

        </jvm>

       </jvms>

/usr/local/jboss6.2/bin/domain.sh

生成文件/root/gc.log,可以用來查看。

ps -ef |grep java

可以看到修改已經(jīng)啟用


如何閱讀和理解GC日志

GC日志開頭的“[GC”和“[Full GC”說明了這次垃圾收集的停頓類型,而不是用來區(qū)分新生代GC還是老年代GC的。如果有“Full”,說明這次GC是發(fā)生了Stop-The-World的,例如下面這段新生代收集器ParNew的日志也會出現(xiàn)“[FullGC”(這一般是因為出現(xiàn)了分配擔(dān)保失敗之類的問題,所以才導(dǎo)致STW)。如果是調(diào)用System.gc()方法所觸發(fā)的收集,那么在這里將顯示“[Full GC (System)”。

[Full GC 283.736: [ParNew:261599K->261599K(261952K), 0.0000288 secs]

接下來的“[DefNew”、“[Tenured”、“[Perm”表示GC發(fā)生的區(qū)域,這里顯示的區(qū)域名稱與使用的GC收集器是密切相關(guān)的,例如上面樣例所使用的Serial收集器中的新生代名為“Default New Generation”,所以顯示的是“[DefNew”。如果是ParNew收集器,新生代名稱就會變?yōu)椤埃跴arNew”,意為“ParallelNew Generation”。如果采用Parallel Scavenge收集器,那它配套的新生代稱為“PSYoungGen”,老年代和永久代同理,名稱也是由收集器決定的。

后面方括號內(nèi)部的“3324K->152K(3712K)”含義是“GC前該內(nèi)存區(qū)域已使用容量-> GC后該內(nèi)存區(qū)域已使用容量 (該內(nèi)存區(qū)域總?cè)萘?”。而在方括號之外的“3324K->152K(11904K)”表示“GC前Java堆已使用容量 -> GC后Java堆已使用容量 (Java堆總?cè)萘?”。

再往后,“0.0025925 secs”表示該內(nèi)存區(qū)域GC所占用的時間,單位是秒。有的收集器會給出更具體的時間數(shù)據(jù),如“[Times: user=0.01 sys=0.00, real=0.02 secs]”,這里面的user、sys和real與Linux的time命令所輸出的時間含義一致,分別代表用戶態(tài)消耗的CPU時間、內(nèi)核態(tài)消耗的CPU事件和操作從開始到結(jié)束所經(jīng)過的墻鐘時間(Wall Clock Time)。CPU時間與墻鐘時間的區(qū)別是,墻鐘時間包括各種非運算的等待耗時,例如等待磁盤I/O、等待線程阻塞,而CPU時間不包括這些耗時,但當(dāng)系統(tǒng)有多CPU或者多核的話,多線程操作會疊加這些CPU時間,所以讀者看到user或sys時間超過real時間是完全正常的。

GCViewer(圖形化工具)

How and When to Capture a Java Thread Dump

vi ~/.bashrc

# user specific aliases and functions

export PATH=$PATH:/usr/local/jdk1.8/bin

先運行./standalone.sh,才能得到j(luò)boss-modules.jar

cd /usr/local/jboss6.2/bin

./standalone.sh

[root@localhost ~]# jps

3013 Jps

2919 jboss-modules.jar

[root@localhost ~]# jstack -l 2919 >jstack.out

[root@localhost ~]# less jstack.out         (查看線程狀態(tài))

samurai.jar可實現(xiàn)實時監(jiān)控TheadDump和GC圖表顯示.(但是需要圖形化界面)

官方網(wǎng)站及說明文檔:http://yusuke.homeip.net/samurai/en/index.html

下載:http://yusuke.homeip.net/samurai/en/samurai.jar

運行: java -jar ./samurai.jar

http://www.eclipse.org/mat/

The Eclipse MemoryAnalyzer is a fast and feature-rich Java heap analyzer that helps you findmemory leaks and reduce memory consumption.

找出某個Java進程中最耗費CPU的Java線程并定位堆棧信息

vi ~/.bashrc

# user specific aliases and functions

export PATH=$PATH:/usr/local/jdk1.8/bin

jstack可以定位到線程堆棧,根據(jù)堆棧信息我們可以定位到具體代碼,所以它在JVM性能調(diào)優(yōu)中使用得非常多。下面我們來一個實例找出某個Java進程中最耗費CPU的Java線程并定位堆棧信息,用到的命令有ps、top、printf、jstack、grep。

第一步先找出Java進程ID,服務(wù)器上的Java應(yīng)用名稱為mrf-center:

root@ubuntu:/# ps -ef | grep mrf-center |grep -v grep

root    21711    1 1 14:47 pts/3   00:02:10 java -jar mrf-center.jar

得到進程ID為21711,第二步找出該進程內(nèi)最耗費CPU的線程,可以使用

1)ps -Lfp pid

2)ps -mp pid -oTHREAD, tid, time

3)top -Hp pid

用第三個,輸出如下:

JBOSS配置排錯

TIME列就是各個Java線程耗費的CPU時間,CPU時間最長的是線程ID為21742的線程,用

printf "%x\n" 21742

得到21742的十六進制值為54ee,下面會用到。

OK,下一步終于輪到j(luò)stack上場了,它用來輸出進程21711的堆棧信息,然后根據(jù)線程ID的十六進制值grep,如下:

root@ubuntu:/# jstack 21711 | grep 54ee

"PollIntervalRetrySchedulerThread"prio=10 tid=0x00007f950043e000 nid=0x54ee in Object.wait()

可以看到CPU消耗在PollIntervalRetrySchedulerThread這個類的Object.wait(),我找了下我的代碼,定位到下面的代碼:

// Idle wait

getLog().info("Thread [" +getName() + "] is idle waiting...");

schedulerThreadState =PollTaskSchedulerThreadState.IdleWaiting;

long now = System.currentTimeMillis();

long waitTime = now + getIdleWaitTime();

long timeUntilContinue = waitTime - now;

synchronized(sigLock) {

 try{

   if(!halted.get()) {

     sigLock.wait(timeUntilContinue);

   }

 }

 catch (InterruptedException ignore) {

 }

}

它是輪詢?nèi)蝿?wù)的空閑等待代碼,上面的sigLock.wait(timeUntilContinue)就對應(yīng)了前面的Object.wait()。

局域網(wǎng)訪問

直接輸入http://xxx.xx.xx.xxx:8080是不能訪問的,如果想讓局域網(wǎng)內(nèi)的其他機器訪問,需要做如下配置:

關(guān)閉服務(wù)器的防火墻

systemctl stop firewall

Failed to stop firewall.service: Unitfirewall.service not loaded.

centos從7開始默認用的是firewall,這個是基于iptables的,雖然有iptables的核心,但是iptables的服務(wù)是沒安裝的。所以你只要停止firewalld服務(wù)即可:sudo systemctl stopfirewalld.service && sudo systemctl disable firewalld.service

必須要修改JBoss配置文件,方法如下:

vi/usr/local/jboss6.2/standalone/configuration/standalone.xml

找到

<interface name="public">

   <inet-address value="${jboss.bind.address:127.0.0.1}"/>

</interface>

將127.0.0.1修改為JBoss所在機器的IP地址或者修改為0.0.0.0即可,保存退出即可。

訪問測試:

在瀏覽器地址欄中輸入:http://192.168.1.58:8080,出現(xiàn)歡迎界面,證明啟動成功!

JBOSS配置排錯

以后臺運行方式啟動

直接以./standalone.sh方式開啟JBoss會有個缺點,當(dāng)命令窗口關(guān)閉后,JBoss服務(wù)也會down掉。這種方式在遠程服務(wù)器操作JBoss時,非常蛋疼。關(guān)掉遠程終端窗口,JBoss也會down掉。

所以我們需要讓JBoss開啟后在后臺運行:進入到bin目錄下,輸入nohup ./standalone.sh 命令。這樣服務(wù)就會在后臺運行,即使關(guān)閉命令窗口,服務(wù)依然運行。

查看Jboss啟動日志信息輸入:tail-f nohup.out 即可。

停止服務(wù)

以直接啟動方式啟動JBoss,關(guān)閉時可以在啟動終端窗口按鍵 CTRL + C,即可完全停止JBoss服務(wù)

如果使用后臺運行的方式,關(guān)閉服務(wù)器就比較麻煩,找了半天才找到關(guān)閉Jboss EAP6.2 的方法:

進入到JBoss的bin目錄下,輸入:

[root@adminkp bin]# ./jboss-cli.sh -c :shutdown

{"outcome" =>"success"}

或者暴力解決:kill -9 PID

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文名稱:JBOSS配置排錯-創(chuàng)新互聯(lián)
文章URL:http://muchs.cn/article24/djhdje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站內(nèi)鏈、搜索引擎優(yōu)化、微信小程序、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)