最近做一項目,記錄下,供大家參考,也供自己以後查閱:)
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哈哈~