浅谈Tomcat调优

Tomcat是开发中必不可少的web应用服务器,很多时候我们下载下来直接用,比较少关注他的配置,但默认配置性能并不是最优的,我们可以通过优化tomcat以此来提高web项目的性能。

想提高Tomcat web应该服务器的性能可以分为两个方向,服务器资源和优化配置。

一、服务器资源

服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,所以说服务器性能牛B,Tomcat也不会太差。当然提高服务器的硬件配置,是需要大量RMB的支持。所以不到万不得已不会采用这种方式,一般公司会采取下面这种通过优化配置,来提升Tomcat性能的方式。

二、优化配置

1、模式选择

    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

    默认配置如:

<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

    修改配置如:

<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
2、tomcat连接(线程池)

    在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。开启并且使用

   打开如下配置:

  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    
   <!-- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/> -->

在Connector中指定使用共享线程池

  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    
   <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="1000" minSpareThreads="100"/> 
    

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    -->
    <!--<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>-->
    <!-- A "Connector" using the shared thread pool-->
    
        <Connector executor="tomcatThreadPool"
               port="8080"
              protocol="org.apache.coyote.http11.Http11NioProtocol"
              maxHttpHeaderSize="8192"
              maxHttpHeaderSize="8192"
              minSpareThreads="100"
              maxSpareThreads="1000"
              minProcessors="100"
              maxProcessors="1000"
              enableLookups="false"
              URIEncoding="utf-8"
              acceptCount="1000"
              redirectPort="8443"
              disableUploadTimeout="true"/>

Executor重要参数说明:

name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:NONE;

namePrefix:在JVM上,每个运行线程都可以有一个name字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;

maxThreads:该线程池可以容纳的最大线程数。默认值:200;

maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。

maxSpareThreads Tomcat连接器的最大空闲 SOCKET 线程数

minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。

threadPriority:线程的等级。默认是Thread.NORM_PRIORITY

Connector重要参数说明:

executor:表示使用该参数值对应的线程池;

minProcessors:服务器启动时创建的处理请求的线程数;

maxProcessors:最大可以创建的处理请求的线程数;

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

enableLookups 若设为TRUE, 则支持域名解析,可把 ip 地址解析为主机名

redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口

connectionTimeout 连接超时

URIEncoding URL统一编码

3、tomcat缓存优化
    <Connector  executor="tomcatThreadPool"
                port="8080"
               protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxHttpHeaderSize="8192"
              maxThreads="1000"
              minSpareThreads="100"
              maxSpareThreads="1000"
              minProcessors="100"
              maxProcessors="1000"
              enableLookups="false"
              compression="on"
              compressionMinSize="2048"
              compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
              connectionTimeout="20000"
              URIEncoding="utf-8"
              acceptCount="1000"
              redirectPort="8443"
              disableUploadTimeout="true"/>

    compression :打开压缩功能

 compressionMinSize :启用压缩的输出内容大小,这里面默认为2KB

 compressableMimeType :压缩类型

 connectionTimeout :定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间


4、禁用AJP连接器

AJP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。


我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用

   <!-- Define an AJP 1.3 Connector on port 8009 -->
   <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>-->

完成上面几步对Tomcat的优化配置,你的Tomcat web应用服务器肯定会有大幅度的提升。这只是简单的配置,后续还会有针对JVM的专项介绍。JVM参数也是影响Tomcat性能的一个重要因素。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是Tomcat调优面试题的答案: 1. Tomcat的缺省端口是多少,怎么修改? Tomcat的缺省端口是8080,可以通过修改server.xml文件中的Connector节点来修改端口号。 2. tomcat 有哪几种Connector 运行模式(优化)? Tomcat有三种Connector运行模式:BIO、NIO和APR。其中,BIO是传统的阻塞式I/O模式,NIO是非阻塞式I/O模式,APR是使用本地库实现的高性能模式。 3. Tomcat有几种部署方式? Tomcat有两种部署方式:WAR包部署和目录部署。WAR包部署是将应用程序打包成WAR包,然后将WAR包放到Tomcat的webapps目录下;目录部署是将应用程序解压到Tomcat的webapps目录下。 4. tomcat容器是如何创建servlet类实例?用到了什么原理? Tomcat容器在启动时会扫描web.xml文件,将其中的servlet类加载到内存中,并创建servlet实例。Tomcat使用Java反射机制来创建servlet实例。 5. tomcat 如何优化Tomcat优化可以从多个方面入手,包括内存调优、垃圾回收策略调优、共享session处理、添加JMS远程监控、使用专业的分析工具等。 6. 内存调优 可以通过调整JVM的内存参数来进行内存调优,例如-Xms和-Xmx参数可以分别设置JVM的初始内存和最大内存。 7. 垃圾回收策略调优 可以通过调整JVM的垃圾回收策略来进行垃圾回收策略调优,例如使用CMS垃圾回收器或G1垃圾回收器。 8. 共享session处理 可以使用集中式session管理方案,例如使用Redis等缓存服务器来存储session数据,从而实现session共享。 9. 添加JMS远程监控 可以使用JMX来进行远程监控,例如使用JConsole等工具来监控Tomcat的运行状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十点摆码

有用你就打赏一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值