真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JBOSS配置排錯(cuò)

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

10多年的常山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整常山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“常山網(wǎng)站設(shè)計(jì)”,“常山網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

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

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

 

 

操作系統(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 ---啟動(dòng)sshd服務(wù)

netstat -nalt

 

 

 

JBoss運(yùn)行需要依賴于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默認(rèn)安裝到了/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目錄移動(dòng)到usr/local 下,該目錄為所有軟件安裝目錄。

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

vi /etc/profile

增加

JBOSS_HOME=/usr/local/jboss6.2

 

啟動(dòng)JBoss服務(wù)

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

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

 

cd /usr/local/jboss6.2/bin

輸入命令 ./standalone.sh 以a single server instance的模式啟動(dòng)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),說明啟動(dòng)成功。

/usr/local/jboss6.2/standalone/configuration目錄中有***.xml,是用于jboss啟動(dòng)類型。比如:./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模式啟動(dòng)JBoss

測(cè)試:

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

       

           

       

配置slave(slave: 192.168.1.181)

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

設(shè)置名字:

設(shè)置密碼:

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

 

配置master地址:

   

      

   

配置本地接口地址:

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

   

       

           

       

       

          

       

       

           

           

       

配置端口:

       

           

               

           

       

這里的9999端口,改成其它不使用的端口(比如:9099),否則slave server上的9999端口,與master server上的管理端口沖突,最后啟動(dòng)時(shí),會(huì)報(bào)錯(cuò)

配置servers:

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

       

       

           

           

       

   

 

 

啟動(dòng)

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(是隨便找的測(cè)試文件)放到 /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)運(yùn)用了,/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配置排錯(cuò)

Add

JBOSS配置排錯(cuò)

JBOSS配置排錯(cuò)

JBOSS配置排錯(cuò)

Assign

JBOSS配置排錯(cuò)

 

 

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

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

   

          

           

           

             

                  

               

               

             

        

       

 

/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的日志也會(huì)出現(xiàn)“[FullGC”(這一般是因?yàn)槌霈F(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收集器,新生代名稱就會(huì)變?yōu)椤埃跴arNew”,意為“ParallelNew Generation”。如果采用Parallel Scavenge收集器,那它配套的新生代稱為“PSYoungGen”,老年代和永久代同理,名稱也是由收集器決定的。

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

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

 

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

 

先運(yùn)行./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可實(shí)現(xiàn)實(shí)時(shí)監(jiān)控TheadDump和GC圖表顯示.(但是需要圖形化界面)

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

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

運(yùn)行: 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.

 

 

 

找出某個(gè)Java進(jìn)程中最耗費(fèi)CPU的Java線程并定位堆棧信息

vi ~/.bashrc                                                                               

# user specific aliases and functions

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

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

第一步先找出Java進(jìn)程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

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

1)ps -Lfp pid

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

3)top -Hp pid

用第三個(gè),輸出如下:      

JBOSS配置排錯(cuò)

TIME列就是各個(gè)Java線程耗費(fèi)的CPU時(shí)間,CPU時(shí)間最長(zhǎng)的是線程ID為21742的線程,用

printf "%x\n" 21742

得到21742的十六進(jìn)制值為54ee,下面會(huì)用到。

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

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

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

可以看到CPU消耗在PollIntervalRetrySchedulerThread這個(gè)類的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)就對(duì)應(yīng)了前面的Object.wait()。

 

 

 

局域網(wǎng)訪問

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

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

systemctl stop firewall

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

centos從7開始默認(rèn)用的是firewall,這個(gè)是基于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

找到

   

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

 

訪問測(cè)試:

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

JBOSS配置排錯(cuò)

 

 

以后臺(tái)運(yùn)行方式啟動(dòng)

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

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

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

停止服務(wù)

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

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

進(jìn)入到JBoss的bin目錄下,輸入:

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

{"outcome" =>"success"}

或者暴力解決:kill -9 PID


新聞名稱:JBOSS配置排錯(cuò)
URL標(biāo)題:http://weahome.cn/article/jhihpc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部