jboss的7类性能调优

现在需要将项目使用的JBOSS服务器进行一次整体调优,搜集了一些资料,准备从以下几方面进行JBOSS的性能调优:
(1)首先解决之前遇到的jboss无反(假死)应问题。该内容需要下次遇到时着手解决,现在的日志已经可以每日备份,计划用thread dump分析jboss假死问题.
(2)JBOSS-JVM优化,内存参数设置.
(3)分析JBOSS数据压缩功能,根据需要选用.
(4)选用合适的日志输出等级和标准输出数据量大小.
(5)考虑使用jboss-native,提高处理静态文件的处理速度.
(6)数据库连接池优化.
(7)关闭不需要的jboss服务.

[1] jboss无反应或者CPU/mem usage very high
we can use thread dump and jvm arguments to test the code.
参见:
http://binma85.iteye.com/blog/786349
http://binma85.iteye.com/blog/819150

[2]JBOSS-JVM 优化
主要是对Jboss依赖的JVM参数进行优化设置

引用
典型服务器配置有以下几种:
-Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相同
-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。
-Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎
摘自: http://wangtong40.iteye.com/blog/737235



[3]分析JBOSS数据压缩功能,根据需要选用.
当web容器需要大量的数据传输时,为减少数据传输时间,可以考虑启用数据压缩功能。类似css、js等数据是重点考虑对象。主要做法如下所示:
打开server/default/deploy/jboss-web.deployer/server.xml
找 到 protocol=”HTTP/1.1″的 Connector元素,添加属性 URIEncoding=”utf-8″ compression=”on” compressionMinSize=”2048″ noCompressionUserAgents=”gozilla, traviata” compressableMimeType=”text/html,text/xml,text/javascript, text/css, text/plain,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml”

添加完后类似于:

Xml代码 复制代码  收藏代码
  1. <Connector port=”8080″ address=”${jboss.bind.address}”      
  2. maxThreads=”250″ maxHttpHeaderSize=”8192″   
  3. emptySessionPath=”true” protocol=”HTTP/1.1″   
  4. enableLookups=”false” redirectPort=”8443″ acceptCount=”100″   
  5. connectionTimeout=”20000″ disableUploadTimeout=”true” URIEncoding=”utf-8″ compression=”on” compressionMinSize=”2048″ noCompressionUserAgents=”gozilla, traviata” compressableMimeType=”text/html,text/xml,text/javascript, text/css, text/plain,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml”/>  



[4]选用合适的日志输出等级和标准输出数据量大小.
打开server/default/conf/jboss-log4j.xml ,这是一个log4j的配置文件。log4j的详细配置说明请参看  http://logging.apache.org/log4j/1.2/index.html  。日志输出的太多,会导致服务器性能降低,所以减少不必要的日志输出。方法大体如下:

找到 name=”org.jboss” 的category 元素,设置里面的priority元素为
建一个新的category,内容为

log4j 还能够将不同的日志输入到不同的地方,为了以后维护方便,应该将不同 category的日志输入到不同的文件里。详细方法参看上面的网站里的说明。

[5]考虑使用jboss-native,提高处理静态文件的处理速度.
安装jbossNative
    jboss的web container使用的 apache tomcat (http://www.apache.org)。 apache tomcat 有一个扩展包,使tomcat可以通过 java native interface 使用 apache portable runtime (APR),而APR则是大名顶顶的apache httpd 网络服务器的运行时环境。用了这个扩展之后,就使得tomcat可以借助于apache httpd的力量,性能得以提升,尤其是处理静态文件时效率更高。Jboss native,实际上就是tomcat的这个native的扩展,只不过被jboss又添进了一些为了和jboss更好协作而加进去的东西。
要安装jboss native, 按以下步骤进行

请到jboss的网站上下载,地址是 http://www.jboss.org/jbossweb/downloads/jboss-native/?action=a&windowstate=maximized, 依据服务器环境选择合适的版本。 目前我们用的版本是JBoss Native 2.0.4 Linux x86 。
解压下载后的压缩包到某个目录,比如 jbossNative目录
将jbossNative/bin/META-INF/bin/linux2/x86/openssl 复制到/bin
/bin目录里建一个文件夹,名为 native
把jbossNative/bin/META-INF/lib/linux2/x86/ 目录下所有内容复制到上一步建好的/bin/native目录下

[6]数据库连接池优化.
摘自http://wangtong40.iteye.com/blog/737235
在JBOSS_HOME\Server\default\deploy目录下存在**-xa-ds.xml文件,用于JBOSS同数据库连接等配置,默认情况下**-xa-ds.xml文件中不包含关于数据库连接池等方面的配置信息,可以添加一下内容进行数据库连接池方面的设置:

Xml代码 复制代码  收藏代码
  1. <min-pool-size>100min-pool-size>      
  2. <max-pool-size>500max-pool-size>   



[7]关闭不需要的jboss服务.
摘自http://wangtong40.iteye.com/blog/737235
在JBOSS中提供许多通常不需要的服务和Jar包,比如JMX、Mail、AOP、Hibernate等,可以根据具体项目所涉及的技术,删减JBOSS内置应用,从而提高JBOSS中间件启动速度,减少占用系统资源。

删减服务 
   在%JBOSS_HOME%/server/default/deploy中含有一些比如jboss-aop.deployer等目录和mail-service.xml等应用配置文件,如果不需要使用这些应用的话,可以将其一一删除,不过删除时要分外小心,避免应用系统无法启动。
下图为只包含数据库应用的一个已删减不需要服务后的deploy文件夹目录:

删减Jar包
   在%JBOSS_HOME%/server/default/lib中包含一些应用系统不需要的Jar包,这些包同样可以进行删除。

你可能感兴趣的:(java,advanced)