首页 > 编程知识 正文

tomcat支持30w并发,tomcat单机并发

时间:2023-05-06 09:26:27 阅读:25031 作者:887

系统采用常用框架3358www.Sina.com/结构,测试工具使用 Mysql +SSM+Tomcat

刚开始测试,合并量为Jmeter,但竟然出错率达到200/s,让我很郁闷。 Tomcat性能200并发量应该完全没有问题,因此我们查找并重新定位了可提高Tomcat并发量的资料,以提高Tomcat的性能。 如下所示。

在Tomcat目录的jddrjb/catalina.bat中,打开此文件并在前面添加展开

jvm处于客户端模式,在回收内存时,它将停止所有其他任务,并在回收完成后再执行其他任务。 在此期间,eclipse会堵塞。 因此,如果适当增加jvm申请的内存大小来减少回收次数,或者不回收,卡的现象会得到明显改善。15%

可以设置用于Java虚拟机的内存,但如果您的选择有误,虚拟机将不予补偿。 可以在命令行中调整虚拟机使用的内存大小。 使用下表中列出的两个参数设置虚拟机使用的内存大小。

参数说明

-Xms JVM初始化堆的大小

-Xmx JVM堆的最大值

这两个值的大小通常根据需要设置。 初始化堆的大小表示虚拟机启动时向系统请求的内存大小。 一般来说,这个参数不重要。 但是,根据APP应用程序的不同,在负载较大的情况下可能会突然占用大量内存。 在这种情况下,此参数非常重要。 如果虚拟机启动时使用的内存很小,并且在这种情况下初始化了许多对象,则虚拟机必须反复增加内存才能满足使用要求。

因此,通常将-Xms和-Xmx设置为相同的大小,堆的最大值受系统使用的物理内存限制。 一般而言,资料密集的APP应用程式会使用永久物件,而且记忆体使用量可能会迅速增加。 如果APP应用程序所需的内存超过堆的最大值,虚拟机将通知内存溢出,并且APP应用程序服务将崩溃。 因此,建议将堆的最大值设置为可用内存最大值的80%。

缺省情况下,Tomcat可用的内存为128MB,对于大型APP应用程序来说,这些内存还不够,需要很大。

JAVA_OPTS='-Xms【初始化内存大小】

需要增大这两个参数的值。

在Windows上,在文件/jddrjb/catalina.bat中,在文件/jddrjb/catalina.sh之前添加以下设置:

主要功能是JVM性能参数调整

rem以下为JVM参数调整set JAVA_OPTS=-server rem以服务器模式启动,启动速度慢,但配置更稳定、性能更好-Xms8192M rem的本地内存为16G,因此, 其中8G (实际上未达到最大内存的80% ) -避免由于在-Xms8192M rem中设置的频繁GC而导致JVM性能大幅下降- XSS 512k-xx :聚合选项- xx 3360用户mREM内存永久保留区- xx 3360 maxperm size-xx : disableexplicitgc rem禁止System.gc (), 不要意外调用GC方法以影响性能- xx 3360 maxtenuringthreshold=31-xx 3360 useconcmarksweeepgc-xx 3360-xx : cmsparalelelelleld 清除收集器(同时回收xx 3360 usecmscompactatfullcollectionrem频段CMS相关) CMS清除收集器) xx 3360 es=128 m-xx : usefastaccessormethods-xx

1 ). -Xmx【可以使用的最大内存】'

指示初始化内存为256MB,可用最大内存为512MB。

此外,还必须考虑Java提供的垃圾收集的工作方式。 虚拟机的堆大小决定了虚拟机用于垃圾收集的时间和频率。 垃圾收集允许的速度与应用有关,应通过分析实际垃圾收集的时间和频率进行调整。 山的大小越大,完全垃圾的收集越慢,但频率会下降。 如果将堆大小与内存需求匹配,则完全收集起来很快,但会更频繁。JAVA_OPTS'-Xms256m-Xmx512m'基准测试显示,为了保证最佳性能

堆的 大小设大,保证垃圾收集不在整个基准测试的过程中出现。

     如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过3-5秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详 细输出,研究垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的80%作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾 收集不是并行的。

2.打开conf/server.xml,并更改一下内容

maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码

<!-- 调优之前的配置 tomcat默认配置 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>--><!-- 调优之后的配置 --> <Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000" acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5" useURIValidationHack="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" redirectPort="8443"/>

保存后,启动tomcat进行压力测试。结果最后错误率还是没有改变(这里其实Tomcat的并发性能已经提高了)

3.我想可能是mysql数据的连接问题,于是编辑了数据库连接文件datasource.properties,将最大连接数与最长等待空间编辑如下

#初始连接数db.initialSize = 20 #定义最大连接数db.maxActive = 200#定义最大空间db.maxIdle = 20#定义最小空间db.minIdle = 10#定义最长等待时间db.maxWait = 2000db.defaultAutoCommit = truedb.minEvictableIdleTimeMillis = 3600000

最后测试结果,系统性能明显提高,并发量增大并且稳定

测试为每秒500次请求同一个接口,测试次数10次5000次请求成功,且返回数据无丢失。

并发量500无压力,并发量800无压力。

当并发量达到1000时,查看结果报告,1000次中出现三次请求失败。

4.经过以上配置,提高了系统性能,并发量接近1000次/s

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。