最近做一项目,记录下,供大家参考,也供自己以后查阅:)
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哈哈~