JBOSS 部署與性能調優

1 Jboss簡介

JBoss是全世界開發者共同努力的成果,一個基於J2EE的開放源代碼的應用服務器。 因爲JBoss代碼遵循LGPL許可,可以在任何商業應用中免費使用它,而不用支付費用。2006年,Jboss公司被Redhat公司收購。JBoss是一個管理EJB的容器和服務器,支持EJB 1.1、EJB 2.0和EJB3.0的規範。但JBoss核心服務不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用。

1.1 優點

1、JBoss是免費的,開放源代碼J2EE的實現,通過LGPL許可證進行發佈。但同時也有閉源的,開源和閉源流入流出的不是同一途徑。
2、JBoss需要的內存和硬盤空間比較小。
3、安裝便捷:解壓後,只需配置一些環境變量即可。
4、JBoss支持”熱部署”,部署BEAN時,只拷貝BEAN的JAR文件到部署路徑下即可自動加載它;如果有改動,也會自動更新。
5、JBoss與Web服務器在同一個Java虛擬機中運行,Servlet調用EJB不經過網絡,從而大大提高運行效率,提升安全性能。
6、用戶可以直接實施J2EE-EAR,而不是以前分別實施EJB-JAR和Web-WAR,非常方便。
7、Jboss支持集羣。

2 安裝

2.1 下載及安裝

1、首先,要安裝JDK,配置JAVA_HOME環境變量。配置Path在“變量值”裏最前面加入:%JAVA_HOME%/bin; 做完後,在命令窗口中運行java,javac有輸出便可。
2、其次,將下載的JBoss解壓,即完成安裝。(解壓目錄最好不要有空格,否則運行容易出現異常)
下載地址: http://www.jboss.org/jbossas/downloads/
或登錄公司ftp獲取。
3、然後,配置JBOSS_HOME環境變量,值爲JBoss的解壓路徑。
4、最後,可以運行%JBOSS_HOME%\bin\目錄中的run.bat運行JBoss;地址欄輸入http://localhost:8080/會進入JBoss的歡迎界面。
5、網上有的文章提到安裝AOP,我們這裏沒有安裝。

3 部署項目

3.1 jboss部署

跟tomcat一樣,jboss也有一個部署目錄,那就是jboss/server目錄,其中有三個目錄:all,default,minimal,代表了jboss提供的三種部署方式,all表示jboss提供的服務全部打開,default表示默認的jboss服務,minimal表示只打開最基本的。這裏面可以增加自己的部署,我們只使用default。

進入default目錄後,有以下幾個目錄:

conf:一些配置文件。
data:保存的數據,比如有狀態會話bean。
deploy:部署目錄,所有的應用都部署在這裏面,相當於apache的htdocs。
lib:部署的應用程序需要使用到的其它庫(jar)。
log:jboss的日誌。
tmp:部署應用是產生的臨時文件。
work:工作目錄,所部署的應用(一些jar壓縮文件)會被解壓在這裏。

要部署我們的應用,還需要做以下幾步:

網上一些文章說還需要拷貝一些.xml配置文件,及JDBC驅動的.jar包。但實際實驗中並不需要,只要部署的項目中jdbc配置正確即可。(理論上說應該是項目內外的都會加載,但實驗中把項目外部的jdbc配置文件配好,項目內部的不配,結果是不行的)。

1、 把項目文件夾名改爲ROOT.war (.war的纔會被識別,使用ROOT瀏覽器訪問時不用輸項目名)。放到 \server\default\deploy 下。
2、 保證項目中jdbc鏈接正確。路徑:\ROOT.war\WEB-INF\classes\jdbc.properties

4 配置及調優

4.1 配置

1、web服務端口號的修改

1相對路徑:server\default\deploy\jboss-web.deployer\ server.xml 中

<Connector port="8080" address="${jboss.bind.address}"   
         maxThreads="250" maxHttpHeaderSize="8192"
         emptySessionPath="true" protocol="HTTP/1.1"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true" />

將上面的8080端口修改爲你想要的端口即可。

2、去掉和應用無關的部署,加快jboss運行速度。

路徑:server\default\deploy下去掉和應用無關的部署,加快jboss運行速度
bsh-deployer.xml
client-deployer-service.xml
ear-deployer.xml
ejb-deployer.xml
http-invoker.sar
jboss-bean.deployer
jboss-ws4ee.sar
jms
jsr88-service.xml
schedule-manager-service.xml
scheduler-service.xml
sqlexception-service.xml
uuid-key-generator.sar
由於這次我們還關閉了管理端口jmx-console所以要去掉jmx-console.war 和management。
a、關閉jmx-console:
刪除
jboss/server/default/deploy下目錄jmx-console.war、management

注:

關於jmx-console 和web-console的安全配置這裏暫不做說明,想了解的可參看本文最後列出的參考文檔。

1、 去掉localhost:8080 出現的默認界面。

去掉server\default\deploy\jboss-web.deployer\ROOT.war
最後,重啓,輸入以下地址完成測試:
http://127.0.0.1/jmx-console
http://127.0.0.1/web-console
http://127.0.0.1/jbossindex.html
http://127.0.0.1/status

4.2 調優

4.2.1、調整JBOSS最大連接數.

配置deploy/jboss-web.deployer/server.xml文件 .

 <Connector
         port="8080"
         address="0.0.0.0"
         maxThreads="1600"
         minSpareThreads="100"
         maxSpareThreads="250"
         emptySessionPath="false"
         enableLookups="false"
         redirectPort="8443"
         acceptCount="800"
         connectionTimeout="20000"
         disableUploadTimeout="true"
         URIEncoding="UTF-8"
         />

maxThreads:表示最多同時處理的連接數。應該將線程數(最大線程數)設置比最大預期負載(同時併發的點擊)多25%(經驗規則)。
acceptCount:當同時連接的人數達到maxThreads時,還可以接收排隊的連接。
minSpareThread:指“啓動以後,總是保持該數量的線程空閒等待”;設置比預期負載多25%。
maxSpareThread:指“如果超過了minSpareThread,然後總是保持該數量的線程空閒等待”;設置比預期負載多25%。
  其中主要修改兩個參數maxThreads和acceptCount值。增加maxThreads,減少acceptCount值有利縮短系統的響應時間。但是maxThreads和acceptCount的總和最高值不能超過6000,而且maxThreads過大會增加CPU和內存消耗,故低配置用戶可通過降低maxThreads並同時增大acceptCount值來保證系統的穩定。

Jboss部署及性能調優

4.2.2、調整 jvm參數

路徑:% JBOSS_HOME %\bin\run.bat

A:JVM啓動參數共分爲三類:

    其一是標準參數(-),所有的JVM實現都必須實現這些參數的功能,而且向後兼容;
    其二是非標準參數(-X),指的是JVM底層的一些配置參數,這些參數在一般開發中默認即可,不需要任何配置。但是在生產環境中,並不保證所有jvm實現都滿足,所以爲了提高性能,往往需要調整這些參數,以求系統達到最佳性能。另外這些參數不保證向後兼容,也即是說“如有變更,恕不在後續版本的JDK通知”(這是官網上的原話);
    其三是非Stable參數(-XX),這類參數在jvm中是不穩定的,不適合日常使用的,後續也是可能會在沒有通知的情況下就直接取消了,需要慎重使用。

B:而JVM 內存又可分爲三個主要的域 :

    新域、舊域以及永久域。JVM生成的所有新對象放在新域中。一旦對象經歷了一定數量的垃圾收集循環後,便進入舊域。而在永久域中是用來存儲JVM自己的反射對象的,如class和method對象,而且GC(Garbage Collection)不會在主程序運行期對永久域進行清理。其中新域和舊域屬於堆,永久域是一個獨立域並且不認爲是堆的一部分。

C:各主要參數的作用如下 :

    -Xms:設置jvm內存的初始大小
    -Xmx:設置jvm內存的最大值
    -Xmn:設置新域的大小(這個似乎只對 jdk1.4來說是有效的,後來就廢棄了)
    -Xss:設置每個線程的堆棧大小(也就是說,在相同物理內存下,減小這個值能生成更多的線程)
    -XX:NewRatio :設置新域與舊域之比,如-XX:NewRatio = 4就表示新域與舊域之比爲1:4
    -XX:NewSize:設置新域的初始值
    -XX:MaxNewSize :設置新域的最大值
    -XX:PermSize:設置永久域的初始值
    -XX:MaxPermSize:設置永久域的最大值
    -XX:SurvivorRatio=n:設置新域中Eden區與兩個Survivor區的比值。(Eden區主要是用來存放新生的對象,而兩個 Survivor區則用來存放每次垃圾回收後存活下來的對象)

D:常見的錯誤 :

    java.lang.OutOfMemoryError相信很多開發人員都用到過,這個主要就是JVM參數沒有配好引起的,但是這種錯誤又分兩種:java.lang.OutOfMemoryError: Java heap space和java.lang.OutOfMemoryError: PermGen space,其中前者是有關堆內存的內存溢出,可以同過配置-Xms和-Xmx參數來設置,而後者是有關永久域的內存溢出,可以通過配置-XX:MaxPermSize來設置。

下面是個例子,請根據實際情況進行修改,修改run.conf文件中的如下內容:
JAVA_OPTS=”-Xms256m -Xmx2048m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -Djboss.platform.mbeanserver”

參考文檔:
百度百科 http://baike.baidu.com/view/309533.htm
JBOSS性能優化 http://www.blogjava.net/Noah/articles/340440.html
JBoss的配置 http://developer.51cto.com/art/200906/130210.htm
      http://developer.51cto.com/art/200906/129945.htm
jboss安全配置 http://wenku.baidu.com/view/47664a03f12d2af90242e6a3.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章