您的位置:首页 > 运维架构 > Tomcat

Tomcat 性能优化

2018-03-01 15:55 337 查看

配置 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"/>




登录之后可以看到服务器的状态,包括 JVM、ajp-nio-8009 和 http-nio-8080。

优化一: Tomcat 运行模式、执行器、连接器

运行模式

Tomcat 有三种运行模式:bio、nio、apr。

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

2)nio:利用 Java 的非阻塞 IO。Tomcat8 默认使用这种方式,Tomcat7 需要修改 server.xml 的 Connector 节点的协议,即8080 端口那句话。

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


3)apr:从操作系统级别上解决异步 io 阻塞。安装困难,但是大幅度提升性能。

执行器 Executor

Tomcat 默认没有启动线程池。

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

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


连接器 Connector

连接器 Connector 是 Tomcat 接收请求的入口。Connector有两种:HTTP Connector 和 AJP Connector。

与执行器配合使用:

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

<Connector executor="tomcatThreadPool" port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
acceptCount="100"
maxConnections="800"
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="1000"
minSpareThreads="100"
acceptCount="1000"
maxConnections="1000"
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=25
b216
6M -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Tomcat优化