欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tomcat的调优

程序员文章站 2022-06-04 19:38:37
...

一、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"链接超时时间
redirectPort="8443"在需要基于安全通道的场合,把客户端请求转发到语句SSL的指定端口

acceptAccount=""监听端口队列最大数,满了之后客户端请求会被拒绝(不能小于minSpareThreads

minProcessors=""服务器创建时的最小处理线程数

maxProcessors=""服务器同时的最大处理线程数

URIEncoding=""统一编码格式,可以解决get请求上的乱码问题

Tomcat的调优

<?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 &quot;%r&quot; %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容器,并且在多个请求和响应周期过程会重用连接。