tomcat服务器的最大线程和最大内存配置的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat服务器的最大线程和最大内存配置的问题相关的知识,希望对你有一定的参考价值。
大家好!
目前遇到tomcat服务器的最大线程和最大内存配置的问题,希望高手帮忙解决。
具体如下:
1.服务器配置情况:windows2008服务器,8核Intel处理器,6G内存
2.tomcat中的内存配置情况:set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx850m -XX:MaxPermSize=800m(目前只能配到这么大)
3.server.xml中的线程配置情况:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="5000" minSpareThreads="300" maxSpareThreads="600"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
useBodyEncodingForURI="true"/>(注:这个我不清楚怎么配置)
问题:
刚开始第一次做压力测试的时候,还能并发一千以上的用户了;第二次压力测试的时候,只能并发800了;第三次并发不到500了
(注:做几次压力测试的时候,不是在同一天进行的,而且服务器一直在跑,在做其他的测试,所以没有重起过)
现在报错误信息有几种:1.org.apache.tomcat.util.net.leaderfollowerworkerthread......,服务崩掉
2.内存不足,服务崩掉
望高手帮忙解决,谢谢!!
tomcat并发优化配置
参考技术A2.protocol协议更改
主要是针对jvm内存的配置
Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同堆内存分配 (访问量比较大时设为一致)
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
JVM内存限制(最大值)
首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位 处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G- 2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。(使用java命令测试出支持的最大值)
修改bin/catalina.bat文件设置参数
-Xms:设置JVM初始内存大小(默认是物理内存的1/64)
-Xmx:设置JVM可以使用的最大内存(默认是物理内存的1/4,建议:物理内存80%)
-Xmn:设置JVM最小内存(128-256m就够了,一般不设置)
默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、
-Xmx相等以避免在每次GC 后调整堆的大小。
在较大型的应用项目中,默认的内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误“java.lang.OutOfMemoryError:Java heap space”,从而
导致客户端显示500错误。
-XX:PermSize :为JVM启动时Perm的内存大小
-XX:MaxPermSize :为最大可占用的Perm内存大小(默认为32M)
-XX:MaxNewSize,默认为16M
PermGen space的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到
PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的
话,就很可能出现“java.lang.OutOfMemoryError:PermGen space”错误。
对于WEB项目,jvm加载类时,永久域中的对象急剧增加,从而使jvm不断调整永久域大小,为了避免调整),你可以使用更多的参数配置。如果你的WEBAPP下都用了大量的第三
方jar, 其大小超过了jvm默认的大小,那么就会产生此错误信息了。
其它参数:
-XX:NewSize :默认为2M,此值设大可调大新对象区,减少FullGC次数
-XX:NewRatio :改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)
-XX:SurvivorRatio :改变Eden对象空间和残存空间的尺寸比例,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍(缺省值是10)
-XX:userParNewGC 可用来设置并行收集【多CPU】
-XX:ParallelGCThreads 可用来增加并行度【多CPU】
-XXUseParallelGC 设置后可以使用并行清除收集器【多CPU】
详细配置可参看这篇几篇文章:
https://www.cnblogs.com/jianyungsun/p/6911380.html
https://www.cnblogs.com/qmfsun/p/5396710.html
原文链接: https://blog.csdn.net/dc282614966/article/details/81186783
以上是关于tomcat服务器的最大线程和最大内存配置的问题的主要内容,如果未能解决你的问题,请参考以下文章