Tomcat的调优
一、tomcat的调优策略
二、tomcat调优
1)tomcat的服务硬件优化
服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,所以说服务器性能好,Tomcat也不会太差。当然提高服务器的硬件配置,是需要大量RMB的支持的。所以不到万不得已不会采用这种方式,一般公司会采取下面这种通过优化配置,来提升Tomcat性能的方式。
2)tomcat的架构策略调优
tomcat的集群策略
tomcat来进行负载均衡
nginx+tomcat来进行调优
3)tomcat的安装配置调优
优化配置之前,我们需要配置一个tomcat管理员账户,来登录查看Tomcat控制台提高的各种参数。在conf/ tomcat-users.xml下添加用户:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
启动tomcat,登录查看信息:http://127.0.0.1:8080/
jvm调优
因为tomcat是java写的servlet容器,其中运行还是在java虚拟机上的,所以对jvm的调优也是对tomcat调优的一部分。在tomcat启动的时候,也就是用catalina.sh启动tomcat的时候,里面有启动jvm的配置参数。所有在启动的时候可以修改catalina.sh文件进行调优。
tomcat的连接器调优
tomcat有一个server服务器,其中在这个server服务器中可以有多个service服务,而在每个service中,可以有多个connector和一个container,其中在server.xml的文件中很明显。而这个connector就是用来链接外面的链接的,对其中的参数进行设置能进行对tomcat优化。
其中connector标签的参数进行设置调优:
port="8080":端口 protocol="HTTP/1.1":协议和版本号 maxhttpHeaderSize="8192": maxThreads="1000":客户端最大请求的线程数 minSpareThreads="100"Tomcat初始化是创建的socket线程数 minSpareThreads="1000"Tomcat链接器最大空闲socket线程数 connectionTimeout="20000"链接超时时间 acceptAccount=""监听端口队列最大数,满了之后客户端请求会被拒绝(不能小于minSpareThreads) minProcessors=""服务器创建时的最小处理线程数 maxProcessors=""服务器同时的最大处理线程数 URIEncoding=""统一编码格式,可以解决get请求上的乱码问题 |
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
tomcat的3种运行模式
tomcat的运行模式有3种:
bio:
默认的模式,性能非常低下,没有经过任何优化处理和支持.
nio:
nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。
apr:
安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.
启动NIO模式
修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol
执行器优化(线程池)
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。
开启并且使用
禁用AJP连接器
AJP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。