tomcat性能优化,内存优化和并发线程连接优化

时间:2022-09-20 05:00:10

今天被一同事问到tomcat和内存优化的问题,而网上的资料基本都是来回copy,所以抽时间随便写点。文章中设置的参数都是一个随便写的,具体的还要根据自己的情况来定。

1.内存优化:

说到tomcat不得不提的是jvm,想让tomcat跑起来就必须有jvm,而jdk又是自带jvm,所以安装了jdk就可以让tomcat跑起来,而tomcat跑起来要想jvm申请内存空间。这里就是要讲的内存优化。而要想优化内存,就必须了解tomcat的启动过程。

很多人都是从了解startup.bat(linux系统上使用start.sh)开始的。是的,我开始也是这样的。但是当你用编辑器打开脚本文件,看过源码之后你会发现,在这个文件里其实又调用了catalina.bat脚本文件。在这个文件里面有关于java相关的配置,比如:

tomcat性能优化,内存优化和并发线程连接优化

当然如果从被注释掉的部分也可以看出来。更重要的是,被注释掉的部分里面包含了关于申请java内存的相关信息。

所以,tomcat内存优化,通过修改tomcat安装目录下bin文件夹下的catalina.bat(catalina.sh)文件来实现。

具体实现方法:

a.windows平台在catalina.bat文件的@echo off下追加

set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m

这就是简单的实现分配内存了。更详细的jvm内存参数方面的知识,我会再抽时间给大家讲讲。今天就不在此多说了。

b.linux平台可直接在catalina.sh文件的开头追加

JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m"

当然,这些都不是必须的,每个人都有自己的做法。如果不在catalina文件加入内存信息的配置,也可以在每次启动的时候带上这些参数,当然这是一种很麻烦的方式,所以我选择了直接pass。

2.线程优化和高并发

线程优化是通过修改安装目录下conf文件夹下的server.xml文件来实现的。具体做法就是修改文件中

<Connector .../>标签内的内容,通过修改里面的参数及配置来实现。

简单的配置如下:

<Connector executor="tomcatThreadPool"
               port="80" protocol="HTTP/1.1" 
               connectTimeout="60000"
               keepAliveTimeout="15000"
               maxKeepAliveRequests="1"
               redirectPort="443"
               maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="100" disableUploadTimeout="true"/>

参数说明:

connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒。
maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间)
maxHttpHeaderSize - http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
URIEncoding - 指定Tomcat容器的URL编码格式。


maxThreads - 最多同时处理的连接数,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可 创建的最大的线程数。
acceptCount - 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认值可以自己查看源码。可以将此项当做一个等待队列。比如设置了1000,也就是说当线程数超过maxThreads之后的线程,都将放到此队列中。

maxThreads 和acceptCount 这两个值如何起作用,请看下面三种情况

情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。

情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。

情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused


disableUploadTimeout - 上传时是否使用超时机制
enableLookups - 是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
bufferSize - 缓存大小
maxSpareThreads - 最多空闲连接数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程 
minSpareThreads - 最小空闲线程数,Tomcat初 始化时创建的线程数 
minProcessors - 最小空闲连接线程数,用于提高系统处理性能,
maxProcessors - 最大连接线程数,即:并发处理的最大请求数
关于protocal方面的知识,网上写的还是比较详细的,大家可以自行搜索关于apr    bio   nio的相关文档,这里就不再做介绍。
---------------------
作者:bebmwnz
来源:CSDN
原文:https://blog.csdn.net/bebmwnz/article/details/89968824
版权声明:本文为博主原创文章,转载请附上博文链接!