王佐兵+程繼洪
摘要JBoss是世界領(lǐng)先開源的Java應(yīng)用服務(wù)器,可以支持企業(yè)級(jí)應(yīng)用和輕量級(jí)Java Web應(yīng)用,以其靈活的配置和優(yōu)良的性能得到了廣泛的應(yīng)用。JBoss的默認(rèn)配置,并不能很好的支持實(shí)際Java應(yīng)用系統(tǒng)的運(yùn)行,需要進(jìn)行配置調(diào)整,以更好的支持應(yīng)用系統(tǒng)的運(yùn)行。從禁用JBoss自帶的不必要服務(wù)、APR提升JBoss性能、修改虛擬機(jī)參數(shù)、調(diào)整JBoss服務(wù)線程數(shù)和啟用Hibernate二級(jí)緩存等方面對(duì)JBoss默認(rèn)配置進(jìn)行調(diào)整,可解決應(yīng)用系統(tǒng)的性能問題。
關(guān)鍵詞JBoss;APR;Encache;性能
中圖分類號(hào):TP306+.3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-7597(2014)12-0118-02
JBoss是全球領(lǐng)先的企業(yè)級(jí)開源的符合LGPL標(biāo)準(zhǔn)的Java Web服務(wù)器。不但可以支持大規(guī)模企業(yè)級(jí)網(wǎng)站應(yīng)用,也可以運(yùn)行輕量級(jí)的Java Web應(yīng)用系統(tǒng)。作為Java應(yīng)用服務(wù)器,JBoss得到廣泛的應(yīng)用。但JBoss運(yùn)行時(shí),若不加配置,使用默認(rèn)的配置運(yùn)行,在開發(fā)環(huán)境下使用沒有任何性能問題,但不能很好地支持實(shí)際的Web應(yīng)用程序。在實(shí)際應(yīng)用中就遇到這樣一個(gè)應(yīng)用系統(tǒng)性能問題。通過多方探索與學(xué)習(xí),終于解決了JBoss服務(wù)器性能問題。
1問題描述
1.1 服務(wù)器軟硬件配置
所用服務(wù)器為浪潮專用服務(wù)器,影響系統(tǒng)性能的兩個(gè)關(guān)鍵參數(shù)為:CPU為雙核intel xeonTM 2.80 GHz,內(nèi)存為512MB。安裝的操作系統(tǒng)是Windows Server2003,數(shù)據(jù)庫采用的是SQL Server 2000企業(yè)版,服務(wù)器用的是JBoss4.23,JDK1.6。
1.2 軟件需求分析
“家族式詞匯學(xué)習(xí)系統(tǒng)”是一個(gè)B/S結(jié)構(gòu)的詞匯學(xué)習(xí)系統(tǒng),采用的是Struts1.2+Spring1.2+Hibernate3.2整合的輕型J2EE開發(fā)框架。由于該系統(tǒng)需要單詞(漢字)的發(fā)音,所以每個(gè)單詞都要存儲(chǔ)一個(gè)發(fā)音文件,根據(jù)需要還要存儲(chǔ)其他幾個(gè)與單詞有關(guān)的文件,每個(gè)單詞占約100K左右的存儲(chǔ)空間。每個(gè)單元設(shè)置50個(gè)單詞,則每次取出的單詞占內(nèi)存總量為50*100K=5MB。出現(xiàn)的問題是,當(dāng)服務(wù)器同時(shí)在線超過6人時(shí),即不能顯示所需要單詞,界面空白,不能完成正常功能。按照系統(tǒng)性能要求,同時(shí)在線人數(shù)應(yīng)在200左右,則內(nèi)存總量應(yīng)該不小于1GB(200*5MB=1GB)。
2問題分析
引起問題的根本原因是內(nèi)存太低,將原來的512MB內(nèi)存換成了2GB,結(jié)果還是出現(xiàn)相同的問題。支持同時(shí)在線人數(shù)有所增加,但距性能要求的200人相距甚遠(yuǎn)。內(nèi)存已經(jīng)增加為2GB,按軟件需求的內(nèi)存量來說,已經(jīng)足夠,為什么還會(huì)出現(xiàn)性能問題呢?關(guān)鍵就在于JBoss服務(wù)器上,由于JBoss是按默認(rèn)配置運(yùn)行的,所以在運(yùn)行實(shí)際Web應(yīng)用時(shí)就出現(xiàn)了問題。
3問題解決
經(jīng)過分析,從以下幾個(gè)方面對(duì)JBoss進(jìn)行了配置:刪除JBoss自帶的服務(wù)、配置Tomcat連接、使用APR提升JBoss性能、啟用Hibernate二級(jí)緩存Ehcache、修改JBoss的默認(rèn)JAVA_OPTIONS配置、修改JBoss默認(rèn)線程數(shù)、啟用Tomcat數(shù)據(jù)壓縮、修改日志輸出級(jí)別,下面分述之。
3.1 JBoss的3種運(yùn)行模式
JBoss不但功能強(qiáng)大,而且配置靈活,JBoss提供了3種運(yùn)行模式,分別是minimal, default和all。minimal運(yùn)行模式僅提供了一些最基本的logging, JNDI命名服務(wù)和URL配置掃描服務(wù),不能支持EJB、Web應(yīng)用和JMX等高級(jí)服務(wù)。default是一種輕型的J2EE配置,是一種默認(rèn)的運(yùn)行方式,但不支持IIOP、JAXR或集群服務(wù)。all提供了JBoss所有的服務(wù)[1]。由于default是一種默認(rèn)的運(yùn)行模式,以下所做的配置都是針對(duì)default而言的。
3.2 刪除JBoss自帶的服務(wù)
JBoss的默認(rèn)配置為開發(fā)環(huán)境提供了很好的支持,提供了開發(fā)環(huán)境所需要的各種服務(wù),但這些服務(wù),在實(shí)際運(yùn)行環(huán)境中,有些沒有必要,可以將其從JBoss中刪除,以減輕JBoss的運(yùn)行負(fù)擔(dān)。
1)刪除JMX Console服務(wù)。刪除方法是直接刪除default目錄下的deployjmx-console.war文件即可。
2)刪除Web Console服務(wù)。該服務(wù)由console-mgr.sar實(shí)現(xiàn),直接將default目錄下的deploy management console-mgr.sar文件夾刪除。
3)禁用HTTP調(diào)用器。方法是直接將default目錄下的deployhttp-invoker.sar刪除。
3.3 配置Tomcat連接
由于JBoss核心服務(wù)不包括支持servlet/JSP的WEB容器,一般是由Tomcat或Jetty來實(shí)現(xiàn)的。有關(guān)Tomcat連接的配置在default目錄下的deployjboss-web.deployerserver.xml中進(jìn)行設(shè)置。
1)禁用AJP服務(wù)。AJP(Apache JServ Protocol)協(xié)議是一種基于二進(jìn)制的協(xié)議,主要是處理Web服務(wù)器到應(yīng)用服務(wù)器的請(qǐng)求[2]。主要應(yīng)用于處理服務(wù)器的負(fù)載均衡,根據(jù)用戶要求,此系統(tǒng)只在實(shí)驗(yàn)室內(nèi)供200名同學(xué)同時(shí)使用,沒有必要使用負(fù)載均衡,所以禁用此服務(wù)。
2)修改8080端口連接。將監(jiān)聽端口改為默認(rèn)端口80,使用客戶訪問時(shí)無須輸入端口號(hào)即可訪問本系統(tǒng)。最大線程數(shù)(maxThreads)根據(jù)實(shí)際需要進(jìn)行設(shè)置,這里設(shè)置為125(默認(rèn)值為250)。
3)禁用SSL服務(wù)。SSL(Secure Socket Layer)是一種基于安全的Socket連接服務(wù),支持的協(xié)議是https,JBoss采用8443端口監(jiān)聽HTTPS請(qǐng)求。由于此系統(tǒng)不需要SSL服務(wù),所以將此端口連接禁用。將server.xml中如下內(nèi)容注釋掉。
3.4 修改JAVA_OPTIONS
JAVA_OPTIONS是JBoss啟動(dòng)時(shí)傳遞給JVM(Java Virtue Machine)的參數(shù)。需要設(shè)置的是JVM占用的最小內(nèi)存、最大內(nèi)存和垃圾回收方式。編輯{%JBOSS_HOME%}in目錄下的run.bat文件,修改以下內(nèi)容。
rem JVM memory allocation pool parameters. Modify as appropriate.
set JAVA_OPTS=%JAVA_OPTS% -Xms512m –Xmx1225m -XX:+UseParallelGC -XX:+UseParallelOldGC
其中,-Xms表示JVM占用的最小內(nèi)存量,-Xmx表示占用的最大內(nèi)存量,此處根據(jù)實(shí)際需要和服務(wù)器物理內(nèi)存進(jìn)行設(shè)置,最小內(nèi)存量為512MB,最大內(nèi)存量1225MB(即1.2G)。-XX:+UseParallelGC表示啟用并行垃圾回收機(jī)制[3]。
3.5 設(shè)置JBoss服務(wù)線程數(shù)
服務(wù)線程數(shù)越多,處理用戶請(qǐng)求的能力越強(qiáng),但同時(shí)占用的服務(wù)器資源也越多。此參數(shù)要根據(jù)實(shí)際需要和服務(wù)器硬件配置而定。修改default目錄下的conf/jboss-service.xml配置文件中相關(guān)內(nèi)容,將MaximumPoolSize屬性設(shè)置為75,默認(rèn)為10。
3.6 設(shè)置日志輸出級(jí)別
日志在系統(tǒng)開發(fā)和故障處理中可發(fā)揮巨大的作用。但過多的不合適的日志輸出對(duì)服務(wù)器性能有一定影響。日志輸出級(jí)別分為INFO、WARN、DEBUG和ERROR 4個(gè)級(jí)別,系統(tǒng)開發(fā)時(shí),可將日志輸出級(jí)別設(shè)置在DEBUG級(jí)別上,用于觀察所有調(diào)試階段輸出的信息。但在系統(tǒng)實(shí)際運(yùn)行環(huán)境下,只需要將日志輸出級(jí)別設(shè)置在ERROR級(jí)別上,只需要服務(wù)器記錄與錯(cuò)誤有關(guān)的信息,幫助解決運(yùn)行中出現(xiàn)的問題即可。JBoss日志輸出配置在default目錄下的confjboss-log4j.xml文件中。將其中的
4總結(jié)
本文通過禁用JBoss自帶的某些服務(wù),為JBoss減負(fù),通過降低JBoss日志輸出級(jí)別,減少其占用的資源,通過APR加速JBoss和啟用Hibernate二級(jí)緩存等機(jī)制,對(duì)服務(wù)器性能進(jìn)行調(diào)整,達(dá)到了客戶要求,解決了系統(tǒng)性能問題。
參考文獻(xiàn)
[1]Sam Griffith, Norman Richards. JBoss: A Developer's Notebook. O'Reilly Media, Inc. 2005.
[2]http://en.wikipedia.org/wiki/Apache_JServ_Protocol.
[3]http://www.hashei.me/2009/05/tuning-the-sun-hotspot-jdk.html.
[4]http://baike.baidu.com/view/254428.htm?fr=ala0_1.
作者簡(jiǎn)介
王佐兵(1973-),男,煙臺(tái)南山學(xué)院,講師,碩士。