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.内存不足,服务崩掉

望高手帮忙解决,谢谢!!

参考技术A 换weblogic或jboss试试,你要支持这么大的并发量,tomcat性能上肯定是不如weblogic和websphere的。 参考技术B 先把windows的端口连接时间改短。。否则6万端口占满了,就报错了本回答被提问者采纳

tomcat并发优化配置

参考技术A

2.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服务器的最大线程和最大内存配置的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何配置最大工作线程数

Tomcat的性能与最大并发配置

tomcat并发优化配置

如何配置Spring Boot内嵌的tomcat8的最大线程数,最大连接数

如何增加tomcat线程池中的线程数?

tomcat 连接器优化