Jboss瘦身和调优

更新时间:2024-03-12 03:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

JBoss AS的调优与瘦身

JBossAS的调优

基于JBoss 3.2.6 。

FOR 4.0.4+修订版 JBoss4瘦身 前言

这个建议主要是如果对JBossAS进行调优和瘦身的. 这个概念在多数情况是交叉的。当通过瘦身减少闲置服务线程并不能带来大的性能影响的时候,允许你使用较少的内存和资源对其他性能方便进行调整。当然它可以缩短启动时间。而且,作为一般的安全观念――移除你不使用的服务。我们将分开两个种类: 瘦身和调优. 首先我们使用默认的配置并从那里开始瘦身(对于clustering的话题,将在以后的wiki页面进行讨论 ;-) ). 这个建议不牵扯开发者和管理角色交叉调优的区域开发者和管理角色 (应用程序调优象cache大小一样). 这主要是对于管理调优的建议.

这建议将做技术上非J2EE平台兼容(3.2.6无论如何不顺从)的JBoss实例的有关的那些注意,象除去J2EE关键 服务的那样将导致JBoss 失败TCK。多数性能调优/管理任务工作,在现实世界结构里,在技术上属于这个类别。

假设你已经复制server/default 文件夹并将它重新命名为server/slim. 调优

Java Virtual Machine Java虚拟机

???对于你的机器和内存大小来调整

VM垃圾收集或者调整 JDK 5 的垃圾收集???使用64位的机

器和64位的VM,以便你能使用大的heap(堆)大小,通常比2-4GB的大。64位支持在所有最新的SPARC/Solaris 寄存器运行Solaris 9 或者以后的版本是有效的, Itanium 使用 JDK 1.4, 或者在Linux x64 上使用JDK 5.

???如果你不使用上面的最大

32位heap空间(2-4 GB 的heap),不要使用 –d64. 使用64位地

址需要更多的内存来做同样的工作量,并且对于应用程序不需要如此多的内存来说并不能提供更大优势。

???除了避免额外小的

heaps外还要避免额外大的heaps. (我们不能告诉你具备什么资格,因为

它取决于你正做什么). 这影响generational 垃圾收集和扫描heap的总的时间. 有效的调整一个小heap是困难的 (即使你的应用程序仅仅需要使用200MB,如果你使用并行垃圾收集+CMS,然后你将需要远高于512MB). 特大号的heaps为垃圾收集花费不必要的时间扫描内存。

???避开 Sun 1.4 VM. JDK 5 主要是在垃圾收集方面非常的好.

???使用 -server 参数除了使用其他-XX:ThreadStackSize=128k (Solaris) 或者 -Xss128k (其

他任何平台). 在Solaris 上 -Xss128k 什么也没有做 (你只可以设置较大的线程栈大小). 这允许你每个线程通过使用较少的内存达到创建更多线程的目的。but might result in blown stacks with extremely recursive code. 然而, 128k 栈 is still nothing to shake a stick at.

???你真的需要明白恰当的

generational 垃圾收集调整和你真的已经进行了负载测试

(OpenSTA?, JMeter, 等等) 确认是有把握的.

???你确实将使用一个超过2个处理器的多核心机器,及使用不同的平行和并行垃圾收集选择 (我

们谈及这先进的JBoss训练暗示伏笔) 对于最大性能和高拉机回收吞吐量. 不过,你确实需要理

解怎么调整才能使得垃圾收集很好的工作。JDK 5大部分是自我调整.

???JDK 1.4

的默认 NewSize? 不是好的猜想. 坏的经验法则: < 20% 是一个好的 NewSize?. 20%

以上的消费是危险的,这是JDK令人讨厌的一个,能导致它psychotically运行所有满垃圾回收和从未 unsuspend 或者释放出 足够多的内存. JDK 5 似乎没有展示出这个bug,并且似

乎已回升更理智的默认值。

JBoss/Java on Linux

如果你正在运行JBoss AS在Linux服务器上,你应该看看这篇文章的作者: Andrew Oliver, Jboss事业部, Red Hat公司, 顾问 ,在 在Linux服务器上怎么优化Jboss/Java Tomcat

???编辑你的

server/slim/jbossweb-tomcat5?.sar/server.xml 文件

XML文档. 例如, HTTP 连接器:

???检查你正在使用的连接器的

maxThreads=\ minSpareThreads=\ maxSpareThreads=\ enableLookups=\ redirectPort=\ acceptCount=\ connectionTimeout=\ disableUploadTimeout=\

???你应该有多于你最大预期

25%(经验法则)的线程(maxThreads)来处理负载(将来一次性的并

发访问)

???你应该有???你应该有

minSpareThreads 等于恰好比你正常负载多一点 maxSpareThreads等于恰好比你峰值负载多一点

???minSpareThreads 意思是 \启动准备就绪, 总是保持至少这些线程来等待处理\???maxSpareThreads means \如果我们总是超过

minSpareThreads那么总是保持

maxSpareThreads 来等待处理\

???移除任何不需要的值和日志。如果你不用

JBoss的安全,移除这个安全值 (见下面).

???Precompile(预编译) JSPs. (这个内置的编译器非常的会,它可能对于小型站点不值得做.) ???在你的

sever/slim/jbossweb-tomcat50.sar/conf/web.xml 里关闭开发(\)模

RMI的远程调用

默认情况下, JBoss为进来的每个RMI请求创建一个新线程. 在一个大系统中这一般不是高效率的. 其次,它允许无限制的连接在性能或者通信峰值或者run-away 连接方面创建客户端可能是危险的。为了补救这个你应该考虑转向被集中的池请求.

???????

编辑 server/slim/conf/standardjboss.xml

通过改变每个XML分段读数把所有代理绑定改变成被集中的池请求:

???????

jboss:service=invoker,type=jrmp

jboss:service=invoker,type=pooled

JBoss也有大部分无文件证明的PooledInvokerHA你可以试试。 Log4j

日志在性能方面也有重要的影响. 改变日志级别跟踪能给JBossAS 带来蠕虫一样的速度。改变级别为 ERROR (或者WARN) 能引人注目的提升速度。

???默认情况下, JBoss

的日志被打印到控制台和server.log文件里并且它默认使用的日志级别

是 \

???考虑不记录到

System.out (你也能仍旧想改变方向以抓取JVM 错误)

ERROR. 观察JBoss的log4j配置文件的变化,你可以在其运行的时候

???考虑改变日志的级别为

改变这个配置。

???给你的

java class层次增加一个类别过滤器.

关掉打印到控制台的日志(console logging):

???编辑 server/slim/conf/log4j.xml ???改变下面的

XML 片段:

修改成

???然后你可以删除此片段:

改变日志的级别:

???编辑 server/slim/conf/log4j.xml ???移除/注释 这些

XML 片段:

???改变这个

XML片段以改变root类别:

看上去像这样

另外,如果你使用了hibernate的话:

???编辑 server/slim/conf/log4j.xml ???增加如下

XML 片段

最后, 在log4j中也许是最重要的事情,在你拥有的 class 结构上确保你的极限的日志级别. 假设你正在使用的log4j打算不向System.out打印任何东西. 这将大大的降低log4j的额外开销,并且允许你完全享受益处,像如果调用(log.isDebugEnabled())....如果你那么做,那么你的代码中的所有日志都将通过appender进行格式化, 这个threshold 在appender将被从日志消息中去除出去. 它能产生大量的垃圾信息。假设你的java package 以“a.b”开始的话, 在log4j.xml增加一些像这样的信息:

这个可以增加到你在org.apache 和 org.jboss (见上文)中找到过滤类别的同一区域. 部署扫描器(Deployment Scanner )

???部署扫描器每隔???见下面的瘦身

5秒扫描一次,在比较慢的文件系统上尤其吃周期 (*cough* NTFS *cough*).

stuff on ,怎么调整秒数以至于它发生的不那么频繁或者不全部发生。

无状态会话Beans(Stateless Session Beans )

???EJB 1.x-2.x 无状态会话

beans operate with an ill-advised pooling model (required by

the specification). 如果你find你需要考虑设置比默认(10)实例要多的最小线程池的大小:

编辑 server/slim/conf/standardjboss.xml, 向下滚动:

Standard Stateless SessionBean false

stateless-rmi-invoker

并找到:

100

改变它为:

100 100

30000

在很大程度上一种服务器环境中不希望这些池增长和缩减(因为它导致内存碎片,不如潜在的堆使用). 从性能上来说, nuber要足够的大以提供保证你的所有请求不阻塞的服务。 CMP 调整

???读这个链接:

[url]http://www.artima.com/forums/flat.jsp?forum=141&thread=24532[/url]

???和这个链接:

[url]http://www.onjava.com/pub/a/onjava/2003/05/28/jboss_optimization.html[/url]

???现在

ditch CMP 和使用JBossHibernate 代替

连接池(Connection Pools)

???不要使用

XA版本,除非你真的知道你需要使用它. XA连接的性能不好.

???与其在可用的地方利用数据库特定的\支持\检查连接),或者利用数据库特定驱

动的fail-over支持倒不

瘦身

当不使用mail-service服务的时候 (J2EE 标准的 JavaMail 客户端)

???移除???移除

server/slim/deploy/mail-service.xml

server/slim/lib/mail* (mail-plugin.jar, mail.jar - JavaMail stuff)

???移除server/slim/lib/activation.jar (JavaMail使用的Java 活动框架【Java Activation

Framework】)

当不使用缓存失效服务的时候 (一般在集群配置里作为CMP选择一个beans用与失效缓存)

???移除 server/slim/deloy/cache-invalidation-service.xml

当不使用J2EE客户端部署服务的时候(这不是一个很有益的J2EE规格必须服务,对于EAR application-client.xml描述符)

???移除 server/slim/deploy/client-deployer-service.xml

当不使用集成HAR部署和Hibernate会话管理服务的时候

???移除???移除???移除???移除

server/slim/deploy/hibernate-deployer-service.xml (HAR support) server/slim/lib/jboss-hibernate.jar (HAR support) server/slim/lib/hibernate2.jar (Hibernate itself)

server/slim/lib/cglib-full-2.0.1.jar (used by Hibernate to create proxies of

POJOs)

???移除server/slim/lib/odmg-3.0.jar (由hibernate使用的一些傻瓜试的对象-关系映射

行为是从一些傻瓜式的委员会来的[goofy

committee][url]http://www.service-architecture.com/database/articles/odmg_3_0.html[/url]) 不使用 Hypersonic的时候 (在生产环境里你可能不使用这个)

注意在默认配置里 JBossMQ使用 DefaultDS名字同样被部署,用于为Hypersonic映射. 在配置上对于其他选择的更多信息,见 JBoss MQ Persistence Wiki pages .

???移除???移除???移除

server/slim/deploy/hsqldb-ds.xml server/slim/lib/hsqldb-plugin.jar server/slim/lib/hsqldb.jar

不使用 JBossMQ 的时候(我们的 JMS 服务器)

???移除???移除

the entire server/slim/deploy/jms directory server/slim/lib/jbossmq.jar

不使用 HTTPInvoker的时候 (从RMI到HTTP的隧道)

???移除

the entire server/slim/deploy/http-invoker.sar 文件夹

不使用 XA 数据源的使用 (分布式 and/or 可恢复的事务)

???移除

server/slim/deploy/jboss-xa-jdbc.rar

如果你不需要JMX-Console 然后删除它

???移除

server/slim/deploy/jmx-console.war

???使用别的方法 使它安全

如果你不需要制造JMX调用RMI (警告the shutdown.sh 是否这样做)

???移除???移除

server/slim/deploy/jmx-invoker-adaptor-server.sar server/slim/deploy/jmx-adaptor-plugin.jar

顶替

???或者你可能想正好想用安全的 the JMX invoker-adaptor

如果你不需要web-console

???移除

server/slim/deploy/management/web-console.war

如果你不需要JMX的JSR-77扩充

???移除

server/slim/deploy/management/console-mgr.sar

如果你需要web-console 或者 jsr-77 扩充的其中之一

???移除

server/slim/deploy/management directory entirely

如果你不使用控制台/email监控警报

???移除???移除

server/slim/deploy/monitoring-service.xml server/slim/lib/jboss-monitoring.jar

???你现在能删除从来没有引用的

server/slim/conf/xmdesc/ClientUserTransaction-xmbean.xml 文件

如果你不需要持久化MBean(persistent MBean )特性 (默认情况下,没有JBoss MBeans使用它...yet)

???编辑 server/slim/conf/jboss-service.xml???移除/注释这个

文件

XML片段

xmbean-dd=\

data/xmbean-attrs

???既然server/slim/conf/xmdec/xmdesc/AttributePersistenceService-xmbean.xml已经不在

被引用,你也可以删除它。

如果你不使用RMI类装载器 (在服务器上利用classes从客户端装载代码)

???vi

编辑 server/slim/conf/jboss-service.xml文件

XML片段

???移除/注释这个

???修改

XML片段 (注意: 在JBoss 4.0里,是在server/slim/deploy/ejb-deployer.xml文件里

的一点设置):

或者选择性的移除WebServiceName? depends/attribute. 如果你只想使用 JBoss Naming locally (没有 RMI 客户端)

???用

vi打开 server/slim/conf/jboss-service.xml文件

XML片段

???更改下面的

xmbean-dd=\ ...

...

...

改写

xmbean-dd=\ ...

...

...

该RmiPort 大多是可选的,但是它意味着我们将不绑定到1098端口,以便这是有益的. 你也可以从相同的XML区域删除此行,来删除相关联的线程池:

proxy-type=\jboss.system:service=ThreadPool

和它自己的线程池块:

如果你使用它,从JMX控制台(显示JNDI命名树) 此JNDIView MBean 是非常有用的, 除非你不使用它。

???使用

vi打开 server/slim/conf/jboss-service.xml

???删除

xmbean-dd=\

???你可以也删掉

server/slim/conf/xmdesc/JNDIView-xmbean.xml 文件

如果你不使用JBossSX, 我们为EJBs或者Web层组件继承的基于JAAS的安全 (then you deserve to be flogged and I hope you get hacked but thats another story):

???使用

vi打开 server/slim/conf/jboss-service.xml

???删除

-->

???也移除/注释:

???如果你使用

JBossMQ,你将需要从

server/slim/deploy/jms/jbossmq-destinations-service.xml文件的所有测试

queues/topics中删掉任何一个 (优先的)或者注释掉他们的安全性信息. 如果你选择保持示例topics/queues增加如下注释:

name=\

-->

name=\

ger

name=\

name=\

???如果使用

JBossMQ ,你也需要编辑server/slim/deploy/jms/jbossmq-service.xml 和变更

InterceptorLoader? XML 片段,像下面这样:

???你也需要注释或者删除(从

server/slim/deploy/jms/jbossmq-service.xml文件):

-->

???修改死亡信队列项(server/slim/deploy/jms/jbossmq-service.xml) 注释掉安全源:

name=\

???在 server/slim/deploy/jms/jms-ds.xml

文件中修改JmsXA 项如下:

???如果使用

JBoss 4, also do this 2 things:

文件中, 注释下面的:

???在 conf/login-config.xml

sa sa

jboss.jca:service=LocalTxCM,name=DefaultDS

guest guest guest

jboss.jca:service=TxCM,name=JmsXA -->

???和在

deploy/hsqldb-ds.xml文件中注释:

如果你不使用池请求(Pooled Invoker)If you are not using the (见调优章节,也也许想使用池请求) 然后:

???使用

vi打开 server/slim/conf/jboss-service.xml 文件

???删掉:

如果你不希望使用 BeanShell deployer

???使用

vi打开 server/slim/conf/jboss-service.xml 文件

???删除或者注释

???删除 server/slim/bsh* (bsh-deployer.jar, bsh-1.3.0.jar)

如果你不使用热部署文件到server/slim/deploy 文件夹,而从外部重启JBoss:

???使用

vi打开 server/slim/conf/jboss-service.xml 文件

的片段:

???改变这个 XML

...

改为(加入):

...

???就这个性能透视而言,看其他建议的调整章节

如果你不使用集群

???最好的方法就是从\配置启动,而不是使用\配置启动. 然后从\配置里带来

的一些各种服务,你在\配置里没有使用.

???如果你必须从“all”配置启动: o 移除 server/slim/farm o 移除o 移除o 移除

server/slim/deploy-hasingleton server/slim/deploy/cluster-service.xml

server/slim/deploy/tc5-cluster-service.xml (或者 在4.0.4或者以前的版本上的

server/slim/deploy/tc5-cluster.sar)

o 移除o 移除

server/slim/deploy/deploy.last/farm-service.xml server/slim/deploy/deploy-hasingleton-service.xml

o 进入到 server/slim/deploy/jms 文件夹, 删除它的内容,并从

server/default/deploy/jms文件夹复制他们到这里.

o 编辑 server/slim/deploy/jbossweb-tomcat55.sar/META-INF

/jboss-service.xml 移除下面的片段:

jboss.cache:service=TomcatClusteringCache

如果你不使用分布式(集群)web会话(sessions)

???移除 server/slim/deploy/tc5-cluster-service.xml (或者 在

4.0.4或者以前的版本上的

server/slim/deploy/tc5-cluster.sar)

???编辑 server/slim/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml 移除这

个片段:

jboss.cache:service=TomcatClusteringCache

如果你不使用Farm服务 (复制部署)

???移除

server/slim/farm

????移除server/slim/deploy/deploy.last/farm-service.xml

JBoss AS的调优与瘦身就翻译完了,翻译的不好,请谅解。还有就是这也只是看看,到底用途和状况怎么样,还需要具体的实践工作

本文来源:https://www.bwwdw.com/article/dcs8.html

Top