Tomcat服务器优化

优化一: Connector、Executor

  执行器 Executor

    Tomcat 默认没有启动线程池。
    在 server.xml 中打开注释,启用线程池。根据主机性能和需求改变 maxThreads 和 minSpareThreads 的大小,并且要将 Executor 的 name 名称添加到端口号处。

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="800" minSpareThreads="100" maxQueueSize="100" prestartminSpareThreads="true" />
  Connector协议

    Tomcat 有三种协议:bio、nio、apr。
     1)bio:Tomcat7 以前版本默认模式,一个线程处理一个请求,没有经过任何优化处理。并发量高时,线程数最多,浪费资源,并且是阻塞式线程。

protocol="org.apache.coyote.http11.Http11Protocol"

     2)nio:利用 Java 的非阻塞 IO。Tomcat8 默认使用这种方式,Tomcat7 需要修改 server.xml 的 Connector 节点的protocol。

protocol="org.apache.coyote.http11.Http11NioProtocol"

     3)apr:Apache Portable Runtime,是Apache可移植运行库,利用本地库可以实现高可扩展性、高性能;Apr是在Tomcat上运行高并发应用的首选模式,但是需要安装apr、apr-utils、tomcat-native等包。

protocol="org.apache.coyote.http11.Http11AprProtocol"
  Connector

    连接器 Connector 是 Tomcat 接收请求的入口。当客户端请求服务器时,客户端协议与服务器OS完成三次握手建立连接,OS将请求放入accept队列,处理队列中的请求时,生成request,调用servlet容器处理请求,最后返回response。这里蕴含两层含义:连接和请求。连接是指客户端与服务器依赖的TCP协议的链接,请求是指HTTP层面,一个TCP连接中可以传输多个HTTP请求。
    Tomcat存放请求的accept队列类似于Java中的Executor的队列,请求的处理实际上是由线程池中的Worker线程完成的。

    与执行器配合使用:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="600" minSpareThreads="100" maxSpareThreads="500" maxQueueSize="100" prestartminSpareThreads="true"/>

<Connector executor="tomcatThreadPool" port="8080"
	       protocol="org.apache.coyote.http11.Http11NioProtocol"
	       acceptCount="700"
	       maxConnections="700"  
	       connectionTimeout="20000"
	       maxHttpHeaderSize="8192"
	       tcpNoDelay="true"
	       compression="on"
	       compressionMinSize="2048"
	       disableUploadTimeout="true"
               redirectPort="8443"
	       enableLookups="false"
	       URIEncoding="UTF-8"/>

    连接器单独使用(不需要同执行器一块使用):

<Connector port="8080"
	       protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="600"
	       minSpareThreads="100"
	       maxSpareThreads="500"
	       acceptCount="700"
	       maxConnections="700"  
	       connectionTimeout="20000"
	       maxHttpHeaderSize="8192"
	       tcpNoDelay="true"
	       compression="on"
	       compressionMinSize="2048"
	       disableUploadTimeout="true"
               redirectPort="8443"
	       enableLookups="false"
	       URIEncoding="UTF-8"/>

优化二:禁用AJP Connector连接器

    AJP:Apache JServer Protocol服务器内部的协议。
    Web 服务器是通过 Tcp 来交互的,为了节省 socket 的创建,Web 服务器会尝试维护一个永久的 Tcp 连接到 Servlet 容器。禁用 AJP 时,Tomcat 可以直接跳过静态资源的处理,实现动静分离。

    在 server.xml 中注释掉:

	<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

优化三:JVM 参数优化

    1)Java 栈内存
    2)堆内存

  • Windows 版本,修改 bin/catalina.bat 文件:*
set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms1024M -Xmx2048M -XX:NewSize=512M -XX:MaxNewSize=1024M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC
  • linux 版本,修改 bin/catalina.sh 文件:*
set JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1024M -Xmx2048M -XX:NewSize=512M -XX:MaxNewSize=1024M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"

配置 Tomcat 的用户名和密码

    如果想在 Tomcat 的主页查看服务器的状态和内存配置,需要配置管理员的用户名和密码。

    在 config/tomcat-user.xml 中配置用户名和密码,配置的用户名为 tomcat,密码为 tomcat,登录之后可以看到服务器的状态。

    <role rolename="manager"/>
    <role rolename="manager-gui"/>
    <role rolename="admin"/>
    <role rolename="admin-gui"/>
    <user username="tomcat" password="tomcat" roles="admin,manager,admin-gui,manager-gui"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值