記錄一次壓力測試 weblogic 11g 調優過程

最近做一項目,記錄下,供大家參考,也供自己以後查閱:)

 

OS:Linux gdap1 2.6.18-194.1.AXS3 #1 SMP Fri May 7 10:03:53 CST 2010 x86_64 x86_64 x86_64 GNU/Linux
weblogic版本:10.3.6.0,採用集羣模式
jdk:jrockit-jdk1.6.0_31-R28.2.3-4.1.0

 

 

 

日期 問題描述 調整項
2013/1/30 啓動壓力測試後,事務約:1個左右每秒,經修改 調整weblogic啓動 JVM 參數 JAVA_OPTIONS,事務數據能達到4個左右; 1.調整weblogic啓動 JVM 參數,在 JAVA_OPTIONS中增加: -Dweblogic.threadpool.MinPoolSize=200 -Dweblogic.threadpool.MaxPoolSize=500
2.修改weblogic jdbc:domain->服務->數據源->loan->連接池->(初始容量:100, 最大容量:200, 最小容量:100)
2013/2/4 1.VU用戶併發能到達5個,事務平均數爲4.78左右,增加再多VU,事務數不會增加,跟蹤jrockit飛行記錄,發現有爭用現象,
javacommon.struts2.interceptor.SharedRenderVariableInterceptor 經排查是strus中有同步記錄事務數,導致線程等待。經調整後,能提升到每秒15個事務左右;

1)修改easyloan.war\WEB-INF\classes\struts.xml:把如下內容註釋掉:
<!--
        <interceptors>
            <interceptor name="sharedRenderVariableInterceptor"
                         class="javacommon.struts2.interceptor.SharedRenderVariableInterceptor"/>
            <interceptor-stack name="customDefaultCrudStack">
                <interceptor-ref name="paramsPrepareParamsStack"/>
                <interceptor-ref name="sharedRenderVariableInterceptor"/>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="customDefaultCrudStack"/>
--!>
2) 把 easyloan.war\WEB-INF\classes\struts.xml修改:
<constant name="struts.devMode" value="false"/>    <!-- 開發模式設置爲false --!>
3) 修改 easyloan.war\WEB-INF\classes\spring\applicationContext-service.xml 如下:
default-autowire="byName" default-lazy-init="false"  <!-- 惰性加載,調整參數爲false --!>
4).向 easyloan.war\WEB-INF\classes\configuration.xml 文件的 <configuration>中增加如下:
  <settings>
   <setting name="lazyLoadingEnabled" value="false"/>
   <setting name="aggressiveLazyLoading" value="fasle"/>
   <setting name="defaultExecutorType" value="REUSE"/>
  </settings>
2013/2/18 前端LR顯示只能達到併發用戶約10個,tps到達40左右;服務器端經觀察發現GC無法回收,並且後續tps下降到約5個左右; 1.Weblogic32位,JDK64位,經調整爲weblogic32位和 weblogic 自帶的32位JDK,內存爲2G,性能提升約100倍(TPS:600,響應時間:0.37秒)
2013/2/20 從開始執行性能測試以來,LR前端顯示 tps最高到達40左右,無法再增漲。 今天拷貝jrockit33 64bit,和jrockit22 64bit;安裝jrockit-jdk1.6.0_22-R28.1.1-4.0.1,性能明顯提升,tps最高到達970; 
2013/2/22 壓力測試時,流量過大,約60M/s 修改,easyloan.war\WEB-INF\web.xml,把<!--GZIP filter …!> 去掉,以便壓縮流量,但會增加CPU運算;
2013/2/26 經過長時間使用,主機報:“cannot set user id: 資源暫時不可用,系統資源分配不夠”; 所有應用主機修改如下:
[loanapp@gdap1 ~]$ cat /etc/security/limits.conf |grep loanapp
#loanapp soft nproc 2047
loanapp soft nproc 10240
loanapp hard nproc 16384
loanapp soft nofile 65535
loanapp hard nofile 65536
2013/3/5 集羣環境中存在,隨着壓力測試時間增長,主機資源利用率逐漸下降,調整後問題解決 在setDomainEnv.sh/中增加如下啓動參數:
JAVA_OPTIONS="${JAVA_OPTIONS} -Xgc:throughput -XX:+HeapDumpOnCtrlBreak -XX:+HeapDumpOnOutOfMemoryError -XXgcthreads:32"
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=100 "
2013/3/5 集羣環境存在隊列等待,經打補丁包後解決; Weblogic1036-Patches

 

 

經調優後,具體java啓動參數如下:
/app/weblogic/jrockit-jdk1.6.0_22-R28.1.1-4.0.1/bin/java
-jrockit 使用jrockit
-Xms4096m 最小堆 建議與最大堆設置成一致;
-Xmx4096m 最大堆
-Xns1024m 新生代的空間大小,建議1/4最大堆大小
-Dweblogic.ProductionModeEnabled=true   開啓生產模式
-Xgc:throughput GC模式:按吞吐量進行GC
-XXgcthreads:32 最大GC線程
-XX:+HeapDumpOnCtrlBreak  當 dump 時,生成dump文件
-XX:+HeapDumpOnOutOfMemoryError 當內存溢出時,生成dump文件
-Dweblogic.threadpool.MinPoolSize=100 最小線程池大小;
-Dweblogic.ext.dirs=/app/weblogic/Oracle/Middleware/patch_wls1036/profiles/default/sysext_manifest_classpath:/app/weblogic/Oracle/Middleware/patch_ocp371/profiles/default/sysext_manifest_classpath 補丁路經

小意思記錄:

        在最後幾天壓力測試(混合場景)時,發現DB庫cpu資源達到 100%,我們的開發大拿,在沒有停止壓力測試過程中把他們所有需要建立索引的sql語句執行一次,DB資源突然就下降到5%左右。    O(∩_∩)O哈哈~

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