JBoss服务器性能配置
2014-09-01王佐兵程继洪
王佐兵+程继洪
摘要JBoss是世界领先开源的Java应用服务器,可以支持企业级应用和轻量级Java Web应用,以其灵活的配置和优良的性能得到了广泛的应用。JBoss的默认配置,并不能很好的支持实际Java应用系统的运行,需要进行配置调整,以更好的支持应用系统的运行。从禁用JBoss自带的不必要服务、APR提升JBoss性能、修改虚拟机参数、调整JBoss服务线程数和启用Hibernate二级缓存等方面对JBoss默认配置进行调整,可解决应用系统的性能问题。
关键词JBoss;APR;Encache;性能
中图分类号:TP306+.3 文献标识码:A 文章编号:1671-7597(2014)12-0118-02
JBoss是全球领先的企业级开源的符合LGPL标准的Java Web服务器。不但可以支持大规模企业级网站应用,也可以运行轻量级的Java Web应用系统。作为Java应用服务器,JBoss得到广泛的应用。但JBoss运行时,若不加配置,使用默认的配置运行,在开发环境下使用没有任何性能问题,但不能很好地支持实际的Web应用程序。在实际应用中就遇到这样一个应用系统性能问题。通过多方探索与学习,终于解决了JBoss服务器性能问题。
1问题描述
1.1 服务器软硬件配置
所用服务器为浪潮专用服务器,影响系统性能的两个关键参数为:CPU为双核intel xeonTM 2.80 GHz,内存为512MB。安装的操作系统是Windows Server2003,数据库采用的是SQL Server 2000企业版,服务器用的是JBoss4.23,JDK1.6。
1.2 软件需求分析
“家族式词汇学习系统”是一个B/S结构的词汇学习系统,采用的是Struts1.2+Spring1.2+Hibernate3.2整合的轻型J2EE开发框架。由于该系统需要单词(汉字)的发音,所以每个单词都要存储一个发音文件,根据需要还要存储其他几个与单词有关的文件,每个单词占约100K左右的存储空间。每个单元设置50个单词,则每次取出的单词占内存总量为50*100K=5MB。出现的问题是,当服务器同时在线超过6人时,即不能显示所需要单词,界面空白,不能完成正常功能。按照系统性能要求,同时在线人数应在200左右,则内存总量应该不小于1GB(200*5MB=1GB)。
2问题分析
引起问题的根本原因是内存太低,将原来的512MB内存换成了2GB,结果还是出现相同的问题。支持同时在线人数有所增加,但距性能要求的200人相距甚远。内存已经增加为2GB,按软件需求的内存量来说,已经足够,为什么还会出现性能问题呢?关键就在于JBoss服务器上,由于JBoss是按默认配置运行的,所以在运行实际Web应用时就出现了问题。
3问题解决
经过分析,从以下几个方面对JBoss进行了配置:删除JBoss自带的服务、配置Tomcat连接、使用APR提升JBoss性能、启用Hibernate二级缓存Ehcache、修改JBoss的默认JAVA_OPTIONS配置、修改JBoss默认线程数、启用Tomcat数据压缩、修改日志输出级别,下面分述之。
3.1 JBoss的3种运行模式
JBoss不但功能强大,而且配置灵活,JBoss提供了3种运行模式,分别是minimal, default和all。minimal运行模式仅提供了一些最基本的logging, JNDI命名服务和URL配置扫描服务,不能支持EJB、Web应用和JMX等高级服务。default是一种轻型的J2EE配置,是一种默认的运行方式,但不支持IIOP、JAXR或集群服务。all提供了JBoss所有的服务[1]。由于default是一种默认的运行模式,以下所做的配置都是针对default而言的。
3.2 删除JBoss自带的服务
JBoss的默认配置为开发环境提供了很好的支持,提供了开发环境所需要的各种服务,但这些服务,在实际运行环境中,有些没有必要,可以将其从JBoss中删除,以减轻JBoss的运行负担。
1)删除JMX Console服务。删除方法是直接删除default目录下的deployjmx-console.war文件即可。
2)删除Web Console服务。该服务由console-mgr.sar实现,直接将default目录下的deploy management console-mgr.sar文件夹删除。
3)禁用HTTP调用器。方法是直接将default目录下的deployhttp-invoker.sar删除。
3.3 配置Tomcat连接
由于JBoss核心服务不包括支持servlet/JSP的WEB容器,一般是由Tomcat或Jetty来实现的。有关Tomcat连接的配置在default目录下的deployjboss-web.deployerserver.xml中进行设置。
1)禁用AJP服务。AJP(Apache JServ Protocol)协议是一种基于二进制的协议,主要是处理Web服务器到应用服务器的请求[2]。主要应用于处理服务器的负载均衡,根据用户要求,此系统只在实验室内供200名同学同时使用,没有必要使用负载均衡,所以禁用此服务。
2)修改8080端口连接。将监听端口改为默认端口80,使用客户访问时无须输入端口号即可访问本系统。最大线程数(maxThreads)根据实际需要进行设置,这里设置为125(默认值为250)。
3)禁用SSL服务。SSL(Secure Socket Layer)是一种基于安全的Socket连接服务,支持的协议是https,JBoss采用8443端口监听HTTPS请求。由于此系统不需要SSL服务,所以将此端口连接禁用。将server.xml中如下内容注释掉。
3.4 修改JAVA_OPTIONS
JAVA_OPTIONS是JBoss启动时传递给JVM(Java Virtue Machine)的参数。需要设置的是JVM占用的最小内存、最大内存和垃圾回收方式。编辑{%JBOSS_HOME%}in目录下的run.bat文件,修改以下内容。
rem JVM memory allocation pool parameters. Modify as appropriate.
set JAVA_OPTS=%JAVA_OPTS% -Xms512m –Xmx1225m -XX:+UseParallelGC -XX:+UseParallelOldGC
其中,-Xms表示JVM占用的最小内存量,-Xmx表示占用的最大内存量,此处根据实际需要和服务器物理内存进行设置,最小内存量为512MB,最大内存量1225MB(即1.2G)。-XX:+UseParallelGC表示启用并行垃圾回收机制[3]。
3.5 设置JBoss服务线程数
服务线程数越多,处理用户请求的能力越强,但同时占用的服务器资源也越多。此参数要根据实际需要和服务器硬件配置而定。修改default目录下的conf/jboss-service.xml配置文件中相关内容,将MaximumPoolSize属性设置为75,默认为10。
3.6 设置日志输出级别
日志在系统开发和故障处理中可发挥巨大的作用。但过多的不合适的日志输出对服务器性能有一定影响。日志输出级别分为INFO、WARN、DEBUG和ERROR 4个级别,系统开发时,可将日志输出级别设置在DEBUG级别上,用于观察所有调试阶段输出的信息。但在系统实际运行环境下,只需要将日志输出级别设置在ERROR级别上,只需要服务器记录与错误有关的信息,帮助解决运行中出现的问题即可。JBoss日志输出配置在default目录下的confjboss-log4j.xml文件中。将其中的
4总结
本文通过禁用JBoss自带的某些服务,为JBoss减负,通过降低JBoss日志输出级别,减少其占用的资源,通过APR加速JBoss和启用Hibernate二级缓存等机制,对服务器性能进行调整,达到了客户要求,解决了系统性能问题。
参考文献
[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.
作者简介
王佐兵(1973-),男,烟台南山学院,讲师,硕士。