• Jboss AS调优与瘦身


    本人转自http://xudayu.blog.51cto.com

    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 连接器:

     

    <Connector port="8080" address="${jboss.bind.address}"  
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
    enableLookups="false" redirectPort="8443" acceptCount="100"  
    connectionTimeout="20000" disableUploadTimeout="true"/>

     

      你应该有多于你最大预期25%(经验法则)的线程(maxThreads)来处理负载(将来一次性的并发访问)

      你应该有minSpareThreads 等于恰好比你正常负载多一点

      你应该有maxSpareThreads等于恰好比你峰值负载多一点

      minSpareThreads 意思是 "启动准备就绪, 总是保持至少这些线程来等待处理"

      maxSpareThreads means "如果我们总是超过minSpareThreads那么总是保持 maxSpareThreads 来等待处理"

      移除任何不需要的值和日志。如果你不用JBoss的安全,移除这个安全值 (见下面).

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

      在你的sever/slim/jbossweb-tomcat50.sar/conf/web.xml 里关闭开发("development")模式

     

    RMI的远程调用

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

           编辑 server/slim/conf/standardjboss.xml

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

    <invoker-mbean>jboss:service=invoker,type=jrmp</invoker-mbean>

    <invoker-mbean>jboss:service=invoker,type=pooled</invoker-mbean>

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

    Log4j

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

      默认情况下, JBoss的日志被打印到控制台和server.log文件里并且它默认使用的日志级别是 "INFO".

      考虑不记录到System.out (你也能仍旧想改变方向以抓取JVM 错误)

      考虑改变日志的级别为ERROR. 观察JBoss的log4j配置文件的变化,你可以在其运行的时候改变这个配置。

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

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

      编辑 server/slim/conf/log4j.xml

      改变下面的XML 片段:

     

    <root>  
      <appender-ref ref=CONSOLE"/>  
      <appender-ref ref="FILE"/>  
    </root>

    修改成

    <root>  
      <appender-ref ref="FILE"/>  
    </root>

      然后你可以删除此片段:

     

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">  
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>  
      <param name="Target" value="System.out"/>  
      <param name="Threshold" value="INFO"/>  
      <layout class="org.apache.log4j.PatternLayout">  
        <!-- The default pattern: Date Priority [Category] Message\n -->  
        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>  
      </layout>  
    </appender>

    改变日志的级别:

      编辑 server/slim/conf/log4j.xml

      移除/注释 这些XML 片段:

     

    <category name="org.apache">  
      <priority value="INFO"/>  
    </category>  
      
    <!—极限 org.jgroups 类别为INFO -->  
    <category name="org.jgroups">  
      <priority value="INFO"/>  
    </category>

      改变这个XML片段以改变root类别:

     

    <root>  
      <appender-ref ref="CONSOLE"/> <!—你可能在前面已经移除这个-->  
      <appender-ref ref="FILE"/>  
    </root>

    看上去像这样

     

    <root>  
      <priority value="ERROR" />  
      <appender-ref ref="CONSOLE"/> <!--你可能在前面已经移除这个-->  
      <appender-ref ref="FILE"/>  
    </root>

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

      编辑 server/slim/conf/log4j.xml

      增加如下XML 片段

    <category name="org.hibernate" > 
        <priority value="INFO" /> 
    </category>

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

     

    <!--极限a.b 类别为INFO -->  
    <category name="a.b">  
    <priority value="INFO"/>  
    </category>

    这个可以增加到你在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, 向下滚动:

    <container-configuration>  
    <container-name>Standard Stateless SessionBean</container-name>  
    <call-logging>false</call-logging>  
    <invoker-proxy-binding-name>stateless-rmi-invoker</invoker-proxy-binding-name>  
    <container-interceptors>

    并找到:

    <container-pool-conf>  
    <MaximumSize>100</MaximumSize>  
    </container-pool-conf>  
    </container-configuration>

    改变它为:

    <container-pool-conf>  
    <MinimumSize>100</MinimumSize>  
    <MaximumSize>100</MaximumSize>  
    <strictMaximumSize/> 
    <strictTimeout>30000</strictTimeout>  
    </container-pool-conf>  
    </container-configuration>

     

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

    CMP 调整

      读这个链接: http://www.artima.com/forums/flat.jsp?forum=141&thread=24532

      和这个链接: [ur]http://www.onjava.com/pub/a/onjava/2003/05/28/jboss_optimization.htm[/ur]

      现在ditch CMP 和使用JBossHibernate 代替

    连接池(Connection Poos)

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

      与其在可用的地方利用数据库特定的"ping"支持"check-connection"(检查连接),或者利用数据库特定驱动的fai-over支持倒不如从不checking connections. (记住并非所有的优化选项都适合你的环境,我们正在讨论的是最佳情况) 。

     

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

      

      移除server/sim/depoy/mai-service.xml

      移除server/sim/ib/mai* (mai-pugin.jar, mai.jar - JavaMai stuff)

      移除server/sim/ib/activation.jar (JavaMai使用的Java 活动框架【Java Activation Framework】)

     

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

      

      移除 server/sim/deoy/cache-invaidation-service.xml

     

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

      

      移除 server/sim/depoy/cient-depoyer-service.xml

     

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

      

      移除server/sim/depoy/hibernate-depoyer-service.xml (HAR support)

      移除server/sim/ib/jboss-hibernate.jar (HAR support)

      移除server/sim/ib/hibernate2.jar (Hibernate itsef)

      移除server/sim/ib/cgib-fu-2.0.1.jar (used by Hibernate to create proxies of POJOs)

      移除server/sim/ib/odmg-3.0.jar (由hibernate使用的一些傻瓜试的对象-关系映射行为是从一些傻瓜式的委员会来的[goofy committee]http://www.service-architecture.com/database/artices/odmg_3_0.htm

     

    不使用 Hypersonic的时候 (在生产环境里你可能不使用这个)

      

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

      移除server/sim/depoy/hsqdb-ds.xml

      移除server/sim/ib/hsqdb-pugin.jar

      移除server/sim/ib/hsqdb.jar

     

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

     

      移除the entire server/sim/depoy/jms directory

      移除server/sim/ib/jbossmq.jar

     

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

     

      移除the entire server/sim/depoy/http-invoker.sar 文件夹

     

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

     

      移除server/sim/depoy/jboss-xa-jdbc.rar

     

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

     

      移除server/sim/depoy/jmx-consoe.war 或者使用别的方法 使它安全

     

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

     

      移除server/sim/depoy/jmx-invoker-adaptor-server.sar

      移除server/sim/depoy/jmx-adaptor-pugin.jar 或者你可能想正好想用安全的 the JMX invoker-adaptor顶替

     

    如果你不需要web-consoe

     

      移除server/sim/depoy/management/web-consoe.war

     

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

     

      移除server/sim/depoy/management/consoe-mgr.sar

     

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

     

      移除server/sim/depoy/management directory entirey

     

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

     

      移除server/sim/depoy/monitoring-service.xml

      移除server/sim/ib/jboss-monitoring.jar

     

    如果你不通过Properties Service使用富资源编辑器(JMX)或者装载properties到系统properties 里。

     

      移除server/sim/depoy/properties-service.xml

      移除server/sim/ib/properties-pugin.jar

     

    此scheduer-service.xm是一个例子,除非你在它的里面放入自己的东西

     

      移除server/sim/depoy/scheduer-service.xml

     

    如果你不适用JBoss调度管理 (允许你安排请求依赖MBeans)

     

      移除server/sim/depoy/schedue-manager-service.xml

      移除server/sim/ib/scheduer-pugin* (scheduer-pugin.jar, scheduer-pugin-exampe.jar)

     

    如果你不需要供应商特定的sq异常援助[handing] (just eave it, reay)

     

      移除server/sim/depoy/sqexception-service.xml

     

    如果你既没有使用客户端事务管理,也没有缓存连接(我们缓存连接来代替池,例如就JAAS->DB User 来说—-使用这个意味着你是个坏人,需要被拍击[using this means you are a bad person and need to be smacked]) .

     

      移除server/sim/depoy/user-service.xml

     

    如果你不使用JBoss的UUID key生成 (大多情况下用于CMP主键生成,但是我们的数据库也同样支持的很好)

     

      移除server/sim/depoy/uuid-key-generator.sar

      移除server/sim/ib/autonumber-pugin.jar

     

    user-service.xm 是一个例子 – 除非你在它里面做一些事情 (你自己的mbeans),你可以移除它.

     

      移除server/sim/depoy/user-service.xml

     

    如果你使用通过HTTP直接连接Tomcat而不是通过Apache/mod_jk:  辑器打开server/slim/deploy/jbossweb-tomcat50.sar/server.xml,移除/注释下面的XML 片段:  

    Xml代码 
    1. <!-- A AJP 1.3 Connector on port 8009 -->    
    2. <Connector port="8009" address="${jboss.bind.address}" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3"/>    

     
    如果你的用户总是不通过HTTP连接到Tomcat而总是通过Apache/mod_jk连接,编辑server/slim/deploy/jbossweb-tomcat50.sar/server.xml 文件,移除/注释下面的XML片段:  

    Xml代码 
    1. <!-- A HTTP/1.1 Connector on port 8080 -->    
    2. <Connector port="8080" address="${jboss.bind.address}" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"/>   

      
    如果你不需要可以部署EAR文件l  使用vi打开编辑 server/slim/conf/jboss-service.xml文件,移除/注释下面的XML片段从这

    从这个

    Xml代码 
    1. <mbean code="org.jboss.management.j2ee.LocalJBossServerDomain">  

     
    MBean 下面

    Xml代码 
    1. <attribute name="EARDeployer">jboss.j2ee:service=EARDeployer</attribute>  

      
    和 

    Xml代码 
    1. <!-- EAR 部署,如果你不使用Web分层,删除-->  
    2. <mbean code="org.jboss.deployment.EARDeployer"name="jboss.j2ee:service=EARDeployer"></mbean>  

      
     如果你不需要可以部署JMS队列,打开 server/slim/conf/jboss-service.xml 文件,移除/注释下面的XML片段

    从这个

    Xml代码 
    1. <mbean code="org.jboss.management.j2ee.LocalJBossServerDomain" >  

     

    Mbean下面 

    Xml代码 
    1. <attribute name="JMSService">jboss.mq:service=DestinationManager</attribute>  

     

    如果你不需要使用CORBA/IIOP,编辑 server/slim/conf/jboss-service.xml文件,移除/注释下面的XML片段 
    从这个

    Xml代码 
    1. <mbean code="org.jboss.management.j2ee.LocalJBossServerDomain">   

     
    MBean 下面

    Xml代码 
    1. <attribute name="RMI_IIOPService">jboss:service=CorbaORB</attribute>  

      
    如果你删除user-transaction-service.xml,server/slim/conf/jboss-service.xml 文件,移除/注释下面的XML片段

    从这个

    Xml代码 
    1. <mbean code="org.jboss.management.j2ee.LocalJBossServerDomain">   

     

    MBean 下面

    Xml代码 
    1. <attribute name="UserTransactionService">jboss:service=ClientUserTransaction</attribute>  

     
    如果你不需要JSR-77支持 (尝试做JBoss, Weblogic 和 Websphere支持一些基于同类的JMX监控)你可以删除/注释server/slim/conf/jboss-service.xml文件关于JSR-77的全部片段: 

    Xml代码 
    1. <!-- ==================================================================== -->    
    2. <!-- JSR-77 Single JBoss Server Management Domain -->    
    3. <!-- ==================================================================== -->    
    4. <mbean code="org.jboss.management.j2ee.LocalJBossServerDomain"    
    5. name="jboss.management.local:j2eeType=J2EEDomain,name=Manager">    
    6. <attribute name="MainDeployer">jboss.system:service=MainDeployer</attribute>    
    7. <attribute name="SARDeployer">jboss.system:service=ServiceDeployer</attribute>    
    8. <!-- <attribute name="EARDeployer">jboss.j2ee:service=EARDeployer</attribute>-->    
    9. <attribute name="EJBDeployer">jboss.ejb:service=EJBDeployer</attribute>    
    10. <attribute name="RARDeployer">jboss.jca:service=RARDeployer</attribute>    
    11. <attribute name="CMDeployer">jboss.jca:service=ConnectionFactoryDeployer</attribute>    
    12. <attribute name="WARDeployer">jboss.web:service=WebServer</attribute>    
    13. <attribute name="MailService">jboss:service=Mail</attribute>    
    14. <!-- <attribute name="JMSService">jboss.mq:service=DestinationManager</attribute>-->    
    15. <attribute name="JNDIService">jboss:service=Naming</attribute>    
    16. <attribute name="JTAService">jboss:service=TransactionManager</attribute>    
    17. <!-- <attribute name="UserTransactionService">jboss:service=ClientUserTransaction</attribute>    
    18. <attribute name="RMI_IIOPService">jboss:service=CorbaORB</attribute>-->    
    19. </mbean>    

     
    如果你不需要client-side事务管理 (记住,使用这个那意味着你是一个坏人) ,编辑 server/slim/conf/jboss-service.xml文件,移除/注释下面的XML片段 

    Xml代码 
    1. <!--  UserTransaction support.  -->    
    2.   
    3. <mbean code="org.jboss.tm.usertx.server.ClientUserTransactionService"    
    4. name="jboss:service=ClientUserTransaction"    
    5. xmbean-dd="resource:xmdesc/ClientUserTransaction-xmbean.xml">    
    6. <depends>    
    7. <mbean code="org.jboss.invocation.jrmp.server.JRMPProxyFactory"    
    8. name="jboss:service=proxyFactory,target=ClientUserTransactionFactory">    
    9. <attribute name="InvokerName">jboss:service=invoker,type=jrmp</attribute>    
    10. <attribute name="TargetName">jboss:service=ClientUserTransaction</attribute>    
    11. <attribute name="JndiName">UserTransactionSessionFactory</attribute>    
    12. <attribute name="ExportedInterface">   
    13. org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory   
    14. </attribute>    
    15. <attribute name="ClientInterceptors">    
    16. <interceptors>    
    17. <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor>    
    18. <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>    
    19. </interceptors>    
    20. </attribute>    
    21. <depends>jboss:service=invoker,type=jrmp</depends>    
    22. </mbean>    
    23. </depends>    
    24. <depends optional-attribute-name="TxProxyName">    
    25. <mbean code="org.jboss.invocation.jrmp.server.JRMPProxyFactory"    
    26. name="jboss:service=proxyFactory,target=ClientUserTransaction">    
    27. <attribute name="InvokerName">jboss:service=invoker,type=jrmp</attribute>    
    28. <attribute name="TargetName">jboss:service=ClientUserTransaction</attribute>    
    29. <attribute name="JndiName"></attribute>    
    30. <attribute name="ExportedInterface"> org.jboss.tm.usertx.interfaces.UserTransactionSession   
    31. </attribute>    
    32. <attribute name="ClientInterceptors">    
    33. <interceptors>    
    34. <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor>    
    35. <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>    
    36. </interceptors>    
    37. </attribute>    
    38. <depends>jboss:service=invoker,type=jrmp</depends>    
    39. </mbean>    
    40. </depends>    
    41. </mbean>  

     
    你现在能删除从来没有引用的server/slim/conf/xmdesc/ClientUserTransaction-xmbean.xml 文件如果你不需要持久化MBean(persistent MBean )特性 (默认情况下,没有JBoss MBeans使用它...yet),编辑 server/slim/conf/jboss-service.xml文件,移除/注释这个XML片段  

    Xml代码 
    1. <!-- ==================================================================== -->    
    2. <!-- XMBean Persistence -->    
    3. <!-- ==================================================================== -->    
    4. <mbean code="org.jboss.system.pm.AttributePersistenceService"    
    5. name="jboss:service=AttributePersistenceService"    
    6. xmbean-dd="resource:xmdesc/AttributePersistenceService-xmbean.xml">    
    7. <attribute name="AttributePersistenceManagerClass">  org.jboss.system.pm.XMLAttributePersistenceManager   
    8. </attribute>    
    9. <attribute name="AttributePersistenceManagerConfig">    
    10. <data-directory>data/xmbean-attrs</data-directory>    
    11. </attribute>    
    12. <attribute name="ApmDestroyOnServiceStop">false</attribute>    
    13. <attribute name="VersionTag"></attribute>    
    14. </mbean>  

     
     既然server/slim/conf/xmdec/xmdesc/AttributePersistenceService-xmbean.xml已经不在被引用,你也可以删除它。 如果你不使用RMI类装载器 (在服务器上利用classes从客户端装载代码),编辑 server/slim/conf/jboss-service.xml文件,移除/注释这个XML片段 

    Xml代码 
    1. <!-- ==================================================================== -->    
    2. <!-- JBoss RMI Classloader - only install when available -->    
    3. <!-- ==================================================================== -->    
    4. <mbean code="org.jboss.util.property.jmx.SystemPropertyClassValue"    
    5. name="jboss.rmi:type=RMIClassLoader">    
    6. <attribute name="Property">java.rmi.server.RMIClassLoaderSpi</attribute>    
    7. <attribute name="ClassName">org.jboss.system.JBossRMIClassLoader</attribute>    
    8. </mbean>  

     

     和

    Xml代码 
    1. <!-- ==================================================================== -->    
    2. <!-- Class Loading -->    
    3. <!-- ==================================================================== -->    
    4. <mbean code="org.jboss.web.WebService"    
    5. name="jboss:service=WebService">    
    6. <attribute name="Port">8083</attribute>    
    7. <!-- Should resources and non-EJB classes be downloadable -->    
    8. <attribute name="DownloadServerClasses">true</attribute>    
    9. <attribute name="Host">${jboss.bind.address}</attribute>    
    10. <attribute name="BindAddress">${jboss.bind.address}</attribute>    
    11. </mbean>   

     
    修改XML片段 (注意: 在JBoss 4.0里,是在server/slim/deploy/ejb-deployer.xml文件里的一点设置): 

    Xml代码 
    1. <!-- EJB deployer, remove to disable EJB behavior-->    
    2. <mbean code="org.jboss.ejb.EJBDeployer" name="jboss.ejb:service=EJBDeployer">    
    3. <attribute name="VerifyDeployments">true</attribute>    
    4.   
    5. ...    
    6.   
    7. <depends optional-attribute-name="WebServiceName">jboss:service=WebService</depends>  
    8. </mbean>   

     
    象这样标明: 

    Xml代码 
    1. <!-- EJB deployer, remove to disable EJB behavior-->    
    2. <mbean code="org.jboss.ejb.EJBDeployer" name="jboss.ejb:service=EJBDeployer">    
    3. <attribute name="VerifyDeployments">true</attribute>    
    4.   
    5. ...    
    6.   
    7. <!-- <depends optional-attribute-name="WebServiceName">jboss:service=WebService</depends> -->    
    8. </mbean>  

     

    或者选择性的移除WebServiceName? depends/attribute.
    如果你只想使用 JBoss Naming locally (没有 RMI 客户端),打开 server/slim/conf/jboss-service.xml文件,更改下面的XML片段 

    Xml代码 
    1. <!-- ==================================================================== -->    
    2. <!-- JNDI -->    
    3. <!-- ==================================================================== -->    
    4. <mbean code="org.jboss.naming.NamingService"    
    5. name="jboss:service=Naming"    
    6. xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">    
    7.   
    8. ...    
    9.   
    10. <!-- The listening port for the bootstrap JNP service. Set this to -1    
    11. to run the NamingService without the JNP invoker listening port.    
    12. -->    
    13. <attribute name="Port">1099</attribute>    
    14.   
    15. ...    
    16.   
    17. <!-- The port of the RMI naming service, 0 == anonymous -->    
    18. <attribute name="RmiPort">1098</attribute>    
    19.   
    20. ...    
    21.   
    22. </mbean>   

     
    改写 

    Xml代码 
    1. <!-- ==================================================================== -->    
    2. <!-- JNDI -->    
    3. <!-- ==================================================================== -->    
    4. <mbean code="org.jboss.naming.NamingService"    
    5. name="jboss:service=Naming"    
    6. xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">    
    7.   
    8. ...    
    9.   
    10. <!-- The listening port for the bootstrap JNP service. Set this to -1    
    11. to run the NamingService without the JNP invoker listening port.    
    12. -->    
    13. <attribute name="Port">-1</attribute>    
    14.   
    15. ...    
    16.   
    17. <!-- The port of the RMI naming service, 0 == anonymous -->    
    18. <attribute name="RmiPort">0</attribute>    
    19.   
    20. ...    
    21.   
    22. </mbean>  

     

     

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

    Xml代码 
    1. <depends optional-attribute-name="LookupPool"  proxy-type="attribute">jboss.system:service=ThreadPool</depends>  

      
     和它自己的线程池块:

    Xml代码 
    1.  <!-- A Thread pool service -->    
    2. <mbean code="org.jboss.util.threadpool.BasicThreadPool"    
    3. name="jboss.system:service=ThreadPool">   
    4. <attribute name="Name">JBoss System Threads</attribute>    
    5. <attribute name="ThreadGroupName">System Threads</attribute>    
    6. <attribute name="KeepAliveTime">60000</attribute>    
    7. <attribute name="MinimumPoolSize">1</attribute>    
    8. <attribute name="MaximumPoolSize">10</attribute>    
    9. <attribute name="MaximumQueueSize">1000</attribute>    
    10. <attribute name="BlockingMode">run</attribute>    
    11. </mbean>  

     
    如果你使用它,从JMX控制台(显示JNDI命名树) 此JNDIView MBean 是非常有用的, 除非你不使用它.打开 server/slim/conf/jboss-service.xml ,删除 

    Xml代码 
    1. <mbean code="org.jboss.naming.JNDIView"  name="jboss:service=JNDIView" xmbean-dd="resource:xmdesc/JNDIView-xmbean.xml"></mbean>  

     
     你可以也删掉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),打开 server/slim/conf/jboss-service.xml,

     删除

    Xml代码 
    1. <!-- ==================================================================== -->    
    2. <!-- Security -->    
    3. <!-- ==================================================================== -->    
    4. <!--    
    5. <mbean code="org.jboss.security.plugins.SecurityConfig"    
    6. name="jboss.security:service=SecurityConfig">    
    7. <attribute name="LoginConfig">jboss.security:service=XMLLoginConfig</attribute>    
    8. </mbean>    
    9. <mbean code="org.jboss.security.auth.login.XMLLoginConfig"    
    10. name="jboss.security:service=XMLLoginConfig">    
    11. <attribute name="ConfigResource">login-config.xml</attribute>    
    12. </mbean>  

     
    编辑 server/slim/deploy/jbossweb-tomcatxx.sar/META-INF/jboss-service.xml 并注释掉这些片段: 

    Xml代码 
    1. <!-- The JAAS security domain to use in the absense of an explicit    
    2. security-domain specification in the war WEB-INF/jboss-web.xml    
    3. -->    
    4. <!-- <attribute name="DefaultSecurityDomain">java:/jaas/other</attribute>-->   
    Xml代码 
    1. 和  
    Xml代码 
    1.    
    2. <!-- A mapping to the server security manager service which must be  operation compatible with type   
    3. org.jboss.security.plugins.JaasSecurityManagerServiceMBean. This is only  needed if web applications are allowed to flush the security manager  authentication cache when the web sessions invalidate.    
    4. -->    
    5. <!—   
    6. <depends optional-attribute-name="SecurityManagerService"    
    7. proxy-type="attribute">jboss.security:service=JaasSecurityManager    
    8. </depends>   
    9. -->   

     
    也移除/注释: <!-- JAAS 安全性管理和区域mapping --> 

    Xml代码 
    1. <mbean code="org.jboss.security.plugins.JaasSecurityManagerService"    
    2. name="jboss.security:service=JaasSecurityManager">    
    3. <attribute name="SecurityManagerClassName">    
    4. org.jboss.security.plugins.JaasSecurityManager    
    5. </attribute>    
    6. <attribute name="DefaultCacheTimeout">1800</attribute>    
    7. <attribute name="DefaultCacheResolution">60</attribute>    
    8. </mbean>  

     
    如果你使用JBossMQ,你将需要从server/slim/deploy/jms/jbossmq-destinations-service.xml文件的所有测试 queues/topics中删掉任何一个 (优先的)或者注释掉他们的安全性信息. 如果你选择保持示例topics/queues增加如下注释: 

    Xml代码 
    1. <mbean code="org.jboss.mq.server.jmx.Topic"    
    2. name="jboss.mq.destination:service=Topic,name=testTopic">    
    3. <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>    
    4. <!—-   
    5. <depends optional-attribute-name="SecurityManager">   
    6. jboss.mq:service=SecurityManager </depends>    
    7. <attribute name="SecurityConf">    
    8. <security>    
    9. <role name="guest" read="true" write="true"/>    
    10. <role name="publisher" read="true" write="true" create="false"/>    
    11. <role name="durpublisher" read="true" write="true" create="true"/>    
    12. </security>    
    13. </attribute>   
    14. -->    
    15. </mbean>    
    16. <mbean code="org.jboss.mq.server.jmx.Topic"    
    17. name="jboss.mq.destination:service=Topic,name=testTopic">    
    18. <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>    
    19. <!-- <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends>    
    20. <attribute name="SecurityConf">    
    21. <security>    
    22. <role name="guest" read="true" write="true"/>    
    23. <role name="publisher" read="true" write="true" create="false"/>    
    24. <role name="durpublisher" read="true" write="true" create="true"/>    
    25. </security>    
    26. </attribute>   
    27. -->    
    28. </mbean>    
    29. <mbean code="org.jboss.mq.server.jmx.Topic"    
    30. name="jboss.mq.destination:service=Topic,name=testDurableTopic">    
    31. <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>    
    32. <!--    
    33. <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends>    
    34. <attribute name="SecurityConf">    
    35. <security>    
    36. <role name="guest" read="true" write="true"/>    
    37. <role name="publisher" read="true" write="true" create="false"/>    
    38. <role name="durpublisher" read="true" write="true" create="true"/>    
    39. </security>    
    40. </attribute>   
    41. -->    
    42. </mbean>    
    43. <mbean code="org.jboss.mq.server.jmx.Queue"    
    44.   
    45. name="jboss.mq.destination:service=Queue,name=testQueue">    
    46.   
    47. <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>    
    48.   
    49. <!--    
    50. <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends>    
    51. <attribute name="SecurityConf">    
    52. <security>    
    53. <role name="guest" read="true" write="true"/>    
    54. <role name="publisher" read="true" write="true" create="false"/>    
    55. <role name="noacc" read="false" write="false" create="false"/>    
    56. </security>    
    57. </attribute>   
    58. -->    
    59. </mbean>  

     

     

    如果使用JBossMQ ,你也需要编辑server/slim/deploy/jms/jbossmq-service.xml 和变更 InterceptorLoader? XML 片段,像下面这样:  

    Xml代码 
    1. <mbean code="org.jboss.mq.server.jmx.InterceptorLoader" name="jboss.mq:service=TracingInterceptor">    
    2. <attribute name="InterceptorClass">org.jboss.mq.server.TracingInterceptor</attribute>    
    3. <depends optional-attribute-name="NextInterceptor">jboss.mq:service=DestinationManager</depends>    
    4. <!--   
    5. <depends optional-attribute-name="NextInterceptor">jboss.mq:service=SecurityManager</depends>  
    6. -->    
    7. </mbean>  

     

    你也需要注释或者删除(从server/slim/deploy/jms/jbossmq-service.xml文件):

    Xml代码 
    1. <!—   
    2. <mbean code="org.jboss.mq.security.SecurityManager" name="jboss.mq:service=SecurityManager">    
    3. <attribute name="DefaultSecurityConfig">    
    4. <security>    
    5. <role name="guest" read="true" write="true" create="true"/>    
    6. </security>    
    7. </attribute>    
    8. <attribute name="SecurityDomain">java:/jaas/jbossmq</attribute>    
    9. <depends optional-attribute-name="NextInterceptor">jboss.mq:service=DestinationManager</depends>    
    10. </mbean>    
    11. -->  

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

    Xml代码 
    1. <!—死亡信队列-->    
    2. <mbean code="org.jboss.mq.server.jmx.Queue"    
    3. name="jboss.mq.destination:service=Queue,name=DLQ">    
    4. <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>    
    5. <!--   
    6. <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends>  
    7. -->    
    8. </mbean>   
    9. 在 server/slim/deploy/jms/jms-ds.xml文件中修改JmsXA 项如下:  <!-- JMS XA 资源适配器, 在beans中使用这个得到处理JMS--> <tx-connection-factory>    
    10. <jndi-name>JmsXA</jndi-name>    
    11. <xa-transaction/>    
    12. <adapter-display-name>JMS Adapter</adapter-display-name>    
    13. <config-property name="SessionDefaultType" type="java.lang.String">javax.jms.Topic</config-property>    
    14. <config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/DefaultJMSProvider</config-property>    
    15. <max-pool-size>20</max-pool-size>    
    16. <!--   
    17. <security-domain-and-application>JmsXARealm</security-domain-and-application>  
    18. -->    
    19. </tx-connection-factory>  

     

    如果使用JBoss 4, also do this 2 things:  在 conf/login-config.xml文件中, 注释下面的:

    Xml代码 
    1. <!—测试jca框架的安全域   
    2.     <application-policy name = "HsqlDbRealm">   
    3.        <authentication>   
    4.           <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule"   
    5.              flag = "required">   
    6.              <module-option name = "principal">sa</module-option>   
    7.              <module-option name = "userName">sa</module-option>   
    8.              <module-option name = "password"></module-option>   
    9.              <module-option name = "managedConnectionFactoryName">      jboss.jca:service=LocalTxCM,name=DefaultDS             </module-option>   
    10.           </login-module>   
    11.        </authentication>   
    12.     </application-policy>   
    13.     <application-policy name = "JmsXARealm">   
    14.        <authentication>   
    15.           <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule"   
    16.              flag = "required">   
    17.              <module-option name = "principal">guest</module-option>   
    18.              <module-option name = "userName">guest</module-option>   
    19.              <module-option name = "password">guest</module-option>   
    20.              <module-option name = "managedConnectionFactoryName">            jboss.jca:service=TxCM,name=JmsXA   
    21.              </module-option>   
    22.           </login-module>   
    23.        </authentication>   
    24. </application-policy>    
    25. -->  

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

    Xml代码 
    1. <!--  
    2. 在conf/login-config.xml文件中使用清晰的安全域   
    3. <security-domain>HsqlDbRealm</security-domain>  
    4. -->   

     

    如果你不使用池请求(Pooled Invoker)If you are not using the (见调优章节,也也许想使用池请求) 然后打开 server/slim/conf/jboss-service.xml 文件删掉:  

    Xml代码 
    1. <!--    
    2. <mbean code="org.jboss.invocation.pooled.server.PooledInvoker"    
    3. name="jboss:service=invoker,type=pooled">    
    4. <attribute name="NumAcceptThreads">1</attribute>    
    5. <attribute name="MaxPoolSize">300</attribute>    
    6. <attribute name="ClientMaxPoolSize">300</attribute>    
    7. <attribute name="SocketTimeout">60000</attribute>    
    8. <attribute name="ServerBindAddress">${jboss.bind.address}</attribute>    
    9. <attribute name="ServerBindPort">4445</attribute>    
    10. <attribute name="ClientConnectAddress">${jboss.bind.address}</attribute>    
    11. <attribute name="ClientConnectPort">0</attribute>    
    12. <attribute name="EnableTcpNoDelay">false</attribute>    
    13. <depends optional-attribute-name="TransactionManagerService">   
    14. jboss:service=TransactionManager</depends>    
    15. </mbean>    
    16. -->  

     

    如果你不希望使用 BeanShell deployer打开 server/slim/conf/jboss-service.xml 文件删除或者注释

    Xml代码 
    1. <mbean code="org.jboss.varia.deployment.BeanShellSubDeployer" name="jboss.scripts:service=BSHDeployer">    
    2. </mbean>  

     
    删除 server/slim/bsh* (bsh-deployer.jar, bsh-1.3.0.jar)
    如果你不使用热部署文件到server/slim/deploy 文件夹,而从外部重启JBoss:打开 server/slim/conf/jboss-service.xml 文件,改变这个 XML的片段: 

    Xml代码 
    1. <!—热部署/反部署归档文件的mbean. -->    
    2. <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"    
    3. name="jboss.deployment:type=DeploymentScanner,flavor=URL">    
    4.   
    5. ...    
    6.   
    7. <attribute name="ScanPeriod">5000</attribute>    
    8.   
    9. ...    
    10.   
    11. </mbean>   

     

    改为(加入):  

    Xml代码 
    1. <!--热部署/反部署归档文件的mbean.-->    
    2. <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"    
    3. name="jboss.deployment:type=DeploymentScanner,flavor=URL">    
    4.   
    5. ...    
    6.   
    7.   
    8. <attribute name="ScanPeriod">5000</attribute>    
    9.   
    10. <attribute name="ScanEnabled">False</attribute>    
    11.   
    12. ...    
    13.   
    14. </mbean>  

     
         就这个性能透视而言,看其他建议的调整章节 如果你不使用集群l  最好的方法就是从"default"配置启动,而不是使用"all"配置启动. 然后从"all"配置里带来的一些各种服务,你在"default"配置里没有使用.如果你必须从“all”配置启动:

    移除 server/slim/farm

    移除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)

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

    移除server/slim/deploy/deploy-hasingleton-service.xml

    进入到 server/slim/deploy/jms 文件夹, 删除它的内容,并从server/default/deploy/jms文件夹复制他们到这里.

    编辑 server/slim/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml 移除下面的片段:

    Xml代码 
    1. <!--  
    2.    如果需要使用HTTP会话集群(HTTP Session Clustering)或者如果在tomcat的server.xml文件中 ClusteredSingleSignOn 值是enabled  
    3. -->   
    4. <depends>jboss.cache:service=TomcatClusteringCache</depends>  

     
    如果你不使用分布式(集群)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 移除这个片段:

    Xml代码 
    1. <!--  
    2.    如果需要使用HTTP会话集群(HTTP Session Clustering)或者如果在tomcat的server.xml文件中 ClusteredSingleSignOn 值是enabled  
    3. -->   
    4. <depends>jboss.cache:service=TomcatClusteringCache</depends>  

     

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

    移除server/slim/farm

    移除server/slim/deploy/deploy.last/farm-service.xml 
     
     
    JBoss AS的调优与瘦身就翻译完了,翻译的不好,请谅解。还有就是这也只是看看,到底用途和状况怎么样,还需要具体的实践工作。

  • 相关阅读:
    [N1CTF 2018]eating_cms 敏感文件扫描+php伪协议利用
    文件包含漏洞(总结)+常见的getshell+PHP伪协议
    laravel安装jwt-auth及验证(实例)
    理解 PHP 8 的 JIT
    Laravel 文件缓存也可以快得飞起,tmpfs 了解一下
    关于 Laravel ORM 对 Model::find 方法进行缓存
    在 Laravel 7 中优雅使用 UUID 教程
    PestPHP 正式开源,一个优雅的测试框架
    PHP 8 还有半年就要来了, 来看看有哪些新特性
    Redis持久化过程的监控及优化
  • 原文地址:https://www.cnblogs.com/oisiv/p/1748900.html
Copyright © 2020-2023  润新知