仔细观察了下Jboss的错误日志,发现,jboss已经宕机了。
本身后台的环境是使用LVS作的负载均衡。目前apache负载均衡器方面,已经没有什么问题了。修改的线程组达到1000。据资料显示,apache默认的线程数是60,最高能达到1000
在http.conf中,加入下面模块:
-
<IfModule mpm_winnt.c>
-
ThreadsPerChild 150
- MaxRequestsPerChild 1000
-
- </IfModule>
后端的Jboss服务器线程数设置比较麻烦。
-
<Connector port="80" address="${jboss.bind.address}"
-
maxThreads="250" maxHttpHeaderSize="8192"
-
emptySessionPath="true" protocol="HTTP/1.1"
-
enableLookups="false" redirectPort="443" acceptCount="100"
-
connectionTimeout="20000" disableUploadTimeout="true"
-
compression="on" compressionMinSize="10"
-
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
- />
acceptCount 是指超过maxThreads可接受的排队数目
修改以上两个线程数目后,继续测试..
测试发现,原本正常运行的测试计划。这次基本都跑死。控制台报出 java.lang.outMemoryError:java heap space错误。在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。所以调整jvm的参数。
-
set HEAP=-Xms1024m -Xmx1024m #堆内存池的大小值
-
set NEW=-XX:NewSize=256m -XX:MaxNewSize=256m #新对象产生时,分配的内存。最好为最大对内存的四分之一
-
set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50% #新对象内存比例
-
set TENURING=-XX:MaxTenuringThreshold=2
-
set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
- set PERM=-XX:PermSize=64m -XX:MaxPermSize=64m