jboss性能優化

jboss性能優化

博客分類:  服務器
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頁面需要預編譯,可以購買內置編譯器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章