Tomcat配置与优化

7 篇文章 0 订阅

JVM设置 

l 一般使用HotSpot JVM。 
l 加上-server。 
l -Xms/-Xmx:设置Java堆初始化和最大值,默认是1/64物理内存和1/4物理内存,一般不超过物理内存的80%,且这两个应该设置成一样,,够用就好,太高会导致浪费内存和GC回收周期长。 
l -XX:NewSize/-XX:NewRatio:设置成25%-33%java堆总量,太高太低都会导致无效GC。 
l -XX:MetaspaceSize/-XX:MaxMetaspaceSize:非堆内内存初始值最大值分别设为128M,256M。 
l -XX:+AggressiveOpts:使用最新优化技术。 
参考oracle官网。

内存>=8G 基础配置内存<8G 基础配置
-server
-XX:+DisableExplicitGC
-XX:+UseG1GC 
-XX:MaxGCPauseMillis=100 
-XX:+ParallelRefProcEnabled
-XX:+HeapDumpOnOutOfMemoryError
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+PrintHeapAtGC 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCDateStamps 
-XX:ErrorFile=/var/app/gc/hs_err_pid%p.log 
-XX:HeapDumpPath=/var/app/gc 
-Xloggc:/var/app/gc/gc%t.log
-server
-XX:+DisableExplicitGC 
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC 
-XX:+UseCMSInitiatingOccupancyOnly 
-XX:CMSInitiatingOccupancyFraction=70 
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses 
-XX:+CMSClassUnloadingEnabled 
-XX:+ParallelRefProcEnabled 
-XX:+CMSScavengeBeforeRemark 
-XX:+HeapDumpOnOutOfMemoryError
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+PrintHeapAtGC 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCDateStamps 
-XX:ErrorFile=/var/app/gc/hs_err_pid%p.log 
-XX:HeapDumpPath=/var/app/gc 
-Xloggc:/var/app/gc/gc%t.log

以下参数配置适用于非计算密集型的大部分应用

分配内存堆配置推荐
2G-Xmx1344M -Xms1344M -Xmn448M -XX:MaxMetaspaceSize=192M -XX:MetaspaceSize=192M
3G-Xmx2048M -Xms2048M -Xmn768M -XX:MaxMetaspaceSize=256M -XX:MetaspaceSize=256M
4G-Xmx2688M -Xms2688M -Xmn960M -XX:MaxMetaspaceSize=256M -XX:MetaspaceSize=256M
5G-Xmx3392M -Xms3392M -Xmn1216M -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M
6G-Xmx4096M -Xms4096M -Xmn1536M -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M
7G-Xmx4736M -Xms4736M -Xmn1728M -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M
8G-Xmx5440M -Xms5440M -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M

tomcat 参数调优 

tomcat中主要修改maxThreads、acceptCount如果要加大并发连接数,应同时加大这两个参数。

1.tomcat的线程数量并不是越多越好。 thread太多,导致切换过多,性能下降严重。这个数量应该是你单个机器的承载能力, 压力测试下得出的结果。 不可任意加大。一般情况下, 256-512个已经非常高的数值了。 

2.JVM参数配置,-Xmn128-256m就够了, 你把gc的收集打印出来,再研究下。 

3.-Xss128k 这个参数, 建议你设置成256k, 不然容易造成不够用, 特别是你的程序有比较多的递归行为。 比如排序。 

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。 

非堆内存分配 

JVM使用-XX:MetaspaceSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxMetaspaceSize设置最大非堆内存的大小,默认是物理内存的1/4。 

JVM内存限制(最大值) 

首先JVM内存限制于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位 处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G- 2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。(使用java命令测试出支持的最大值)。

Tomcat的server.xml中Context元素的以下参数应该怎么配?

方法一

maxThreads="150" 表示最多同时处理150个连接 ;

minSpareThreads="25" 表示即使没有人使用也开这么多空线程等待 ;

maxSpareThreads="75" 表示如果最多可以空75个线程,例如某时刻有80人访问,之后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的;

acceptCount="100" 当同时连接的人数达到maxThreads时,还可以接收排队的连接,超过这个连接的则直接返回拒绝连接。 

根据你的配置建议 

maxThreads="500" 

minSpareThreads="100" 如果你的网站经常访问量都很大的话,缺省就开比较大 

maxSpareThreads="300" 

acceptCount="100" 

这只是说你的服务器可以支持这么多用户,但还要看你安装了哪些东西,还有你的程序是否足够高效率。

方法二

1.如何加大tomcat连接数

在tomcat配置文件server.xml中的配置中,和连接数相关的参数有:

minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10;

maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75

acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100

enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false;

connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。

web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。Unix中如何设置这些参数,请参阅Unix常用监控和管理命令。 

 

 

解决文件上传问题所需修改的tomcat配置

因上传文件过程中文件过大导致服务出现链接超时问题,需在tomcat容器中server.xml配置文件中修改配置如下:

<Connector URIEncoding="UTF-8" connectionTimeout="60000" disableUploadTimeout="false" connectionUploadTimeout="120000" enableLookups="false" executor="tomcatThreadPool" maxHttpHeaderSize="2097152" maxPostSize="104857600" port="8090" protocol="org.apache.coyote.http11.Http11NioProtocol"/>

属性作用:
disableUploadTimeout:上传时是否使用超时机制。
connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,
                                              以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

测试方法:
      本地:将connectionTimeout属性改为1ms,以模拟上传文件超市问题。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值