Tomcat参数&性能优化

学习重点:配置文件参数、故障排错、性能优化,Tomcat 部署。

一、Tomcat配置文件标签&参数剖析

tomcat配置文件:/usr/local/tomcat/conf/server.xml
conf目录下的web.xml也是配置文件,只不过这个一般是java开发才用的。我们不需要管它。

1、server.xml文件中核心标签详解

<Server>                 #定义Tomcat服务器,为顶级标签;  
<Service>                #定义Tomcat服务,可包含一个Engine,多个Connecter;
<Connector>              #定义Tomcat连接器,定义Tomcat对外通信端口;
<Engine>                 #表示Tomcat Service引擎,包含多个Host主机;
<Host>                   #定义虚拟主机配置段,可包含多个Context发布目录;
<Context>                #定义Tomcat内容,可以定义目录、发布内容;
<Valve>                  #定义Tomcat服务日志路径、参数、内容格式;
<Realm>                  #定义Tomcat用户的认证和授权配置;
<GlobalNamingResources>  #定义Tomcat用户的认证和授权全局标签,包含Realm配置。

2、server.xml详情

<?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.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="8090" 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服务器性能优化

1、Tomcat服务器连接器运行模式的选择;
Tomcat Connector(Tomcat连接器)有bio(已淘汰)、nio、apr三种运行模式,在生产环境推荐使用nio和apr方式,从请求处理方式和操作系统级别来解决异步的IO问题,大幅度的提高性能。
注:中小型企业一般采用nio,大型企业一般都采用apr
(1)三种模式解析

  • BIO:

    bio是阻塞式IO操作,使用java io技术,即每一个请求都要创建一个线程来进行处理。缺点:并发量高时,线程数较多,占资源

  • NIO:

    使用java nio技术,能够通过少量的线程处理大量的请求,nio是基于java中非阻塞IO操作的API实现,比传统的i/o处理方式有更高的并发运行性能

  • APR(Apache Portable Runtime/Apache可移植运行时库):

    Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能;apr是从操作系统级别解决异步IO问题,大幅度提高服务器的并发处理性能,也是Tomcat生产环境运行的首选方式

(2)怎么查看当前tomcat使用的是那种模式

tail -n 10 /opt/tomcat/logs/catalina.out  //注意我并没有把tomcat放在/usr/local/下

在这里插入图片描述从红框框中内容可知:http和ajp都是以nio的模式启动的。

(3)nio和apr模式的切换

[1]切换到nio模式

vim /opt/tomcat/conf/server.xml
修改以下内容:
<Connector port="8080" protocol="HTTP/1.1"
                    connectionTimeout="20000"
                    redirectPort="8443" />			
修改protocol的值为org.apache.coyote.http11.Http11NioProtocol

重启tomcat即可。

[2]切换到apr模式

  • 安装apr:yum -y install apr apr-devel
  • 安装native:

注:一般来说/usr/local/tomcat/bin/下,tomcat都会自带有native压缩包。若没有在下面获取。

cd /usr/local/tomcat/bin/
tar xzfv tomcat-native.tar.gz
cd tomcat-native-1.1.33-src/jni/native/ 
//上面这步版本不同,可能地址会不一样。照下图说的做就行。
./configure --with-apr=/usr/bin/apr-1-config
make && make install

在这里插入图片描述注:再在有configure的目录下执行后面的预编译、编译、安装。

native下载地址:
https://archive.apache.org/dist/tomcat/tomcat-connectors/native/

 wget https://archive.apache.org/dist/tomcat/tomcat-connectors/native/tomcat-native-1.1.3.tar.gz
  • tomcat和apr整合
    在/etc/profile中加入:
export CATALINA_OPTS=-Djava.library.path=/usr/local/apr/lib 
source /etc/profile

修改配置文件server.xml
修改以下内容:

<Connector port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" />
修改protocol的值为org.apache.coyote.http11.Http11AprProtocol

再重启tomcat就好了。
在这里插入图片描述这时我们能够发现http已经是以apr模式启动的了,如果ajp也想要以apr的话则:

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 修改protocol的值为org.apache.coyote.ajp.AjpAprProtocol  

再重新启动tomcat。

2、关闭Tomcat server.xml文件中不必要的标签和参数;
Tomcat标签有很多,通常来讲,有部分标签对于业务访问没有需求,可以删除,从而可以加快配置文件查询或者管理便捷。可以删除的标签:
<GlobalNamingResources>
<Realm>
<Context>
4)调整Tomcat WEB对连接数相关参数;
minSpareThreads:最小空闲线程数
maxSpareThreads:最大空闲线程数
maxThreads:最大线程数,大并发请求时
acceptCount:请求队列排队个数
ConnectionTimeout:网络连接超时
以上参数的配置示例:

<Connector port="8080"   
        protocol="org.apache.coyote.http11.Http11NioProtocol"  
           connectionTimeout="20000"  
           redirectPort="443"   
           maxThreads="5000" 
           minSpareThreads="20"  
           acceptCount="10000" 
           disableUploadTimeout="true" 
           enableLookups="false"   
           URIEncoding="UTF-8" />

5)调整Tomcat JVM虚拟机内存设置;
Xmx2048M,设置Java虚拟机的堆的最大可用内存大小
Xms2048M,设置Java虚拟机的堆的初始值内存大小
Xmn512M,设置年轻代内存大小,一般设置为Xmx的1/4
配置示例:

/opt/tomcat/bin/catalina.sh中添加以下内容:
CATALINA_OPTS="$CATALINA_OPTS -Xms512M -Xmx1024M -Xmn256M"

6)关闭Tomcat DNS反查功能;
将参数设置为false,enableLookups=”false”,表示关闭DNS域名反查,提高处理能力。

3、JDK、JRE、JVM关系图:
在这里插入图片描述

发布了162 篇原创文章 · 获赞 142 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/103744077