Tomcat优化

Tomcat:

适当调整tomcat启动内存,添加tomcat最大连接数和线程数。

一般说来,你应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。建议把内存的最高值跟最低值的差值缩小,不然会浪费很多内存的, 最低值加大 ,最高值可以随便设,但是要根据实际的物理内存 ,如果内存设置太大了,比如设置了512M最大内存,但如果没有512M可用内存,Tomcat就不能启动,还有可能存在内存被系统回收,终止进程的情况。

添加启动内存:

Windows 文件 /bin/catalina.bat/Linux 文件 /bin/catalina.sh

cygwin=false 也就是配置文件开头增加:

Linux:JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m"  

Windos:set "JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m"

-server:启用 JDK的 server 版本;

-Xms:Java虚拟机初始化时堆的最小内存,一般与 Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而消耗性能;

-Xmx:Java虚拟机可使用堆的最大内存;

-XX:PermSize:Java虚拟机永久代大小;

-XX:MaxPermSize:Java虚拟机永久代大小最大值;

jmap:观察运行中的JVM 物理内存的占用情况,包括Heap size , Perm size 等

jmap -heap  pid

 

 

添加最大连接和线程,默认tomcat最大线程数是200,等待长度默认100

默认的tomcat 参数:

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

 

修改:

直接打开tomcat连接池配置:

    <Connector port="8282"  protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443"  scheme="https" secure="true"

               maxConnections="10000"

               enableLookups="false"

               maxThreads="1000"

               minProcessors="100"

               maxProcessors="1000"

               minSpareThreads="100"

               maxSpareThreads="1000"

               acceptCount="1000"

               maxPostSize="10485760"

               compression="on"

               disableUploadTimeout="true"

               compressionMinSize="2048"

               acceptorThreadCount="2"

               compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"

               URIEncoding="utf-8"/>

 

 

Tomcat 增加支持https接口

scheme="https" secure="true"

 

 

支持https ssl协议  添加到最后host模块中

        <Valve className="org.apache.catalina.valves.RemoteIpValve"

               remoteIpHeader="X-Forwarded-For"

               protocolHeader="X-Forwarded-Proto"

               protocolHeaderHttpsValue="https"/>

 

 

 

参数说明:

protocol="org.apache.coyote.http11.Http11NioProtocol" 使用java的异步io护理技术,no blocking IO

maxThreads=“600" 表示最多同时处理600个连接最大线程数

minSpareThreads=“100" 表示即使没有人使用也开这么多空线程等待,初始化时创建的线程数

maxSpareThreads=“500" 表示如果最多可以空500个线程,例如某时刻有505人访问,之后没有人访问了,则tomcat不会保留505个空线程,而是关闭505个空的。 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

acceptCount="700" 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

 

ajp协议优化:

如果使用apache和tomcat做集群的负载均衡,并且使用ajp协议做apache和tomcat的协议转发,需要优化ajp connector。

<Connector port="8009" protocol="AJP/1.3" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />

 

Linux 修改 /root/tomcat/bin/catalina.sh 文件,把下面信息添加到文件第一行。

Windows 和 Linux 有点不一样的地方在于,在 Linux 下,下面的的参数值是被引号包围的,而 Windows 不需要引号包围。

 

 

机子内存如果是 4G:

CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"

 

机子内存如果是 8G:

CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms4096m -Xmx4096m -Xmn2048m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"

 

机子内存如果是 16G:

CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms8192m -Xmx8192m -Xmn4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"

 

机子内存如果是 32G:

CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms16384m -Xmx16384m -Xmn8192m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"

 

如果是 8G 开发机

-Xms2048m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=512m

 

如果是 16G 开发机

-Xms4096m -Xmx4096m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=256m -XX:MaxPermSize=512m

 

posted @ 2020-10-28 17:42  岁月倾城CTO  阅读(67)  评论(0)    收藏  举报