jboos性能優化

linux jboss 部署時優化設置:

在/conf/web.xml中通過參數指定:
<session-config>     
    <session-timeout>1440</session-timeout>       
</session-config>   
單位爲分鐘。


Jboss部署目錄優化: 
去掉和應用無關的部署,加快jboss運行速度 
bsh-deployer.xml 
client-deployer-service.xml  
ear-deployer.xml 
ejb-deployer.xml 
http-invoker.sar 
jboss-bean.deployer 
jboss-ws4ee.sar 
jms 
jsr88-service.xml  
schedule-manager-service.xml 
scheduler-service.xml 
sqlexception-service.xml 
uuid-key-generator.sar


降低jboss輸出日誌的等級
打開 <jboss>/server/default/conf/jboss-log4j.xml ,這是一個log4j的配置文件。log4j的詳細配置說明請參看 http://logging.apache.org/log4j/1.2/index.html  。日誌輸出的太多,會導致服務器性能降低,所以減少不必要的日誌輸出。方法大體如下:

1.找到 name=”org.jboss” 的category 元素,設置裏面的priority元素爲 <priority value=”INFO” />
2.建一個新的category,內容爲 <category name=”javax.faces”><priority value=”INFO” /></category>
log4j 還能夠將不同的日誌輸入到不同的地方,爲了以後維護方便,應該將不同 category的日誌輸入到不同的文件裏。詳細方法參看上面的網站裏的說明。

起用jboss內的tomcat對傳輸數據的壓縮功能
合同管理裏用了大量的javascript css等,爲了減少傳輸時間,可以起用壓縮功能。方法是:
1.打開<jboss>/server/default/deploy/jboss-web.deployer/server.xml
2.找到 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”
添加完後類似於:
<Connector port=”8080″ address=”${jboss.bind.address}”   
maxThreads=”250″ maxHttpHeaderSize=”8192″
emptySessionPath=”true” protocol=”HTTP/1.1″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
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”/>


生產實例 

<Connector protocol="HTTP/1.1" port="8080" address="${0.0.0.0}" 
               connectionTimeout="20000" redirectPort="8443"
               
                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"
        />


下面這段需調試好久。,

maxThreads="200" 
               maxSparseThreads="40"
               minSparseThreads="20"
               acceptCount="10"


給jvm分配適當的內存,一般爲服務器的3/4內存量,推薦至少使用4G內存。 
JAVA_OPTS = "-Xms4096m -Xmx8192m -XX:+UseParallelGC -XX:+UseParallelOldGC .. . . "
-Xms=128m這是heap初始化大小。32bit操作系統最大在1.5g-2g之間。64位的無限制
-Xmx=512m 這是heap最大的大小。儘量的將-Xms和-Xmx大小設置相同,這樣避免內存重新分配影響性能
-Xss=128k 線程初始化大小,5.0之前默認是128k,之後爲1m,線程機器最大爲3000-5000
-XX:MaxPermSize=256m.這是表明持久類,也就是noheap區域的最大爲256
-XX:PermSize=256m這個持久區域初始化爲256m,一般持久類的大小是64m

Jvm垃圾收集器包括三種:串行,並行,併發
串行:處理小型數據,jdk1.4之前默認使用
並行:1.5和1.5之後使用,處理

-XX:ParallelGCThreads=20:配置並行收集器的線程數,即:同時多少個線程一起進行垃圾回收。此值最好配置與處理器數目相
-XX:+UseParallelOldGC:配置年老代垃圾收集方式爲並行收集。JDK6.0支持對年老代並行收集。
(併發收集器主要是保證系統的響應時間,減少垃圾收集時的停頓時間。適用於應用服務器、電信領域等。)
-XX:+UseConcMarkSweepGC 設置年老代爲併發收集。測試中配置這個以後,-XX:NewRatio=4的配置失效了,原因不明。所以,此時年輕代大小最好用-Xmn設置。
-XX:CMSFullGCsBeforeCompaction= 由於併發收集器不對內存空間進行壓縮、整理,所以運行一段時間以後會產生“碎片”,使得運行效率降低。此值設置運行多少次GC以後對內存空間進行壓縮、整理。
-XX:ParallelGCThreads=n:設置併發收集器年輕代收集方式爲並行收集時,使用的CPU數。並行收集線程數。

 


修改Jboss的bin目錄下的run.bat/run.sh,在其加一行:

Windows
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx256m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:MaxNewSize=256m -Dfile.encoding=GBK
echo "JAVA_OPTS="$JAVA_OPTS


Linux
JAVA_OPTS="$JAVA_OPTS -Xms128m -Xmx256m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:MaxNewSize=256m -Dfile.encoding=GBK"
echo "JAVA_OPTS="$JAVA_OPTS


生產實例


#add wyg 2011-07-25
#modify wyg 2011-07-27 
JAVA_OPTS="$JAVA_OPTS -Xms1200m -Xmx1200m -XX:PermSize=600m -XX:MaxPermSize=600m -XX:NewSize=400M -XX:MaxNewSize=400M -XX:+UseTLAB -XX:TLABSize=128K"



32位的Windows操作系統,最大也就能分配到1.5G左右的內存。原因是jvm出於性能的考慮分配內存時必須分配連續的內存塊,而在jvm啓動以前往往有一些其它的應用程序將操作系統的內存分割開,所以就會在jvm啓動時出現不能分配堆內存的錯誤。解決方法:
1、在32位的windows操作系統上啓動多個jvm
2、換成64位操作系統

 


 

安全設置
1、jmx-console登錄的用戶名和密碼設置
默認情況訪問http://localhost:8080/jmx-console就可以瀏覽jboss的部署管理的一些信息,不需要輸入用戶名和密碼,使用起來有點安全隱患。下面我們針對此問題對jboss進行配置,使得訪問jmx-console也必須要知道用戶名和密碼纔可進去訪問。步驟如下:
(1)找到JBoss安裝目錄/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml文件,去掉<security-domain>java:/jaas/jmx-console</security-domain>的註釋。修改後的該文件內容爲:
(2)修改與(1)中的jboss-web.xml同級目錄下的web.xml文件,查找到<security-constraint>節點,去掉它的註釋
(3) 在第一步中的jmx-console安全域和第二步中的運行角色JBossAdmin都是在login-config.xml中配置,我們在JBoss安裝目錄/server/default/config下找到它。查找名字爲:jmx-console的application-policy:
<application-policy name = "jmx-console">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag = "required">
<module-option name="usersProperties">props/jmx-console-users.properties</module-option>
<module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
</login-module>
</authentication>
</application-policy>
在此處可以看出,登錄的角色、用戶等的信息分別在props目錄下的jmx-console-roles.properties和jmx-console-users.properties文件中設置,分別打開這兩個文件。
配置完成後讀者可以通過訪問:http://localhost:8088/jmx-console/,輸入jmx-console-roles.properties文件中定義的用戶名和密碼,訪問jmx-console的頁面。

2、web-console登錄的用戶名和密碼設置
默認情況下,用戶訪問JBoss的web-console時,不需要輸入用戶名和密碼,爲了安全起見,我們通過修改配置來爲其加上用戶名和密碼。步驟如下:
(1)找到JBoss安裝目錄F:/JBoss/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml文件,去掉<security-domain>java:/jaas/web-console</security-domain>的註釋
(2)修改與(1)中的jboss-web.xml同級目錄下的web.xml文件,去掉<security-constraint>部分的註釋
(3)打開JBoss安裝目錄在JBoss安裝目錄/server/default/config下的login-config.xml文件,搜索web-console,找到並修改成如下內容:
<application-policy name = "web-console">
    <authentication>
       <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag = "required">
           <module-option name="usersProperties">props/web-console-users.properties</module-option>
           <module-option name="rolesProperties">props/web-console-roles.properties</module-option>
       </login-module>
    </authentication>
</application-policy>
在文件中可以看到,設置登錄web-console的用戶名和角色等信息分別在login-config.xml文件所在目錄下的web-console-users.properties和web-console-roles.properties文件中,但因爲該目錄下無這兩個文件,我們在JBoss安裝目錄/server/default/conf/props目錄下建立這兩個文件,
文件內容可參考在“jmx-console登錄的用戶名和密碼設置”中的兩個相應的配置文件的內容。

 

禁止/打開文件目錄列表
編輯F:/JBoss/server/default/deploy/jboss-web.deployer/conf/web.xml
禁止把listing設置爲false,否則true

防止LOG文件無限制的擴大
在F:/JBoss/server/default/conf目錄下打開jboss-log4j.xml文件,在下語句塊下:
   <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/server.log"/>
      <param name="Append" value="false"/>
增加以下語句:
<param name="MaxFileSize" value="10240KB"/>
<param name="MaxBackupIndex" value="1"/>
其中文件的最大值和備份的數量可以根據實際情況而改變

 

 

 


數據源


<max-pool-size>20</max-pool-size>
      <min-pool-size>5</min-pool-size>
      <idle-timeout-minutes>0</idle-timeout-minutes>




//增加jprofiler 啓動參數(要jprofilter先啓動才能啓動jboss) 一般這個註釋掉

修改 JBoss 的啓動腳本,加入如下參數:
-agentlib:jprofilerti=port=8849 -Xbootclasspath/a:$JPROFILER_HOME/bin/agent.jar  $JAVA_OPTS



//增加jconsole啓動參數

-Djava.rmi.server.hostname=192.168.19.126  -Dcom.sun.management.jmxremote.port=9899-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false  $JAVA_OPTS




jboss線程池


conf/jboss-service.xml

<attribute name="MaximumPoolSize">40</attribute>
      <!-- The max number of tasks before the queue is full -->
      <attribute name="MaximumQueueSize">1000</attribute>


  • Name:在pool中threads的名稱
  • ThreadGroupName:Thread group的名稱
  • KeepAliveTime:當threads空閒時,保持活動的最長時間(單位毫秒)
  • MaximumPoolSize:可以併發的thread的最大數目
  • MinimumPoolSize:可以併發的thread的最小數目
  • MaximumQueueSize:允許等待的request的最大數目
  • BlockingMode:等待隊列滿了以後的處理方式





編譯jsp的配置  

一般情況下,jsp文件在第一次被調用時纔會被編譯,然後每這[被修改一次,就會重新編譯。

這利於開發,但在生產環境下,變樣的配置會引起問題

1。第一個調用jsp頁面的人就要等待jsp頁面被編譯的時間,最好的選擇是關閉頁面的懶編譯特徵

2。每一次頁面要求都會檢查jsp文件是否被修改以決定是否重新編譯,每次請求的檢查更更新降低生產環境的性能

jsp文件的編譯和運行是被 一個java servlet處理的,這個java servlet叫做jspServlet,在 ..../deployers/jbossweb.deployer/web.xml配置 

<servlet>
      <servlet-name>jsp</servlet-name>

<init-param>
                           <description>development</description>
                          <param-name>development</param-name>
                          <param-value>false</param-value>
              </init-param>

<init-param>
                           <description>development</description>
                          <param-name>checkInterval</param-name>
                          <param-value>300</param-value>

<!--  5分鐘  -->

              </init-param>

參數

development 

  缺省值:true

  描述:是否使用開發模式,如果使用,那麼modificationTestInterval參數將會被調用

checkInterval

  缺省值:0

  描述:如果development爲false,checkInterval的值大於0,編譯器起作用,checkInterval是重複編譯的時間間隔,默認一爲0

modificationTestInterval

 缺省值:4

  描述:jsp頁面在最後一次調用後重複檢測的時間間隔,如果是0,那麼每次調用後都檢測,默認值是4


如果有很多的jsp頁面需要預編譯,可以購買內置編譯器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章