• centos7下tomcat8.5安装部署与优化


    转自:https://www.cnblogs.com/busigulang/articles/8529719.html


    一 安装tomcat 8.5

    修改运行级别为文本

    # ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target



    1. 创建标准目录结构


    mkdir /software
    mkdir /data
    mkdir /script


    1.准备软件

    cd /software/
    wget http://124.202.164.15/files/116700000B429E7F/download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz

    wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.28/bin/apache-tomcat-8.5.28.tar.gz


    2.安装前检查:
    rpm -qa | grep java

    rpm -e --nodeps java*

    3. 安装jdk
    cd /woftware/

    tar zxvf jdk-8u161-linux-x64.tar.gz
    mv jdk1.8.0_161 /data/jdk
    ln -s /data/jdk /usr/local/JAVA

    # 配置环境变量:

    在/etc/profile 中加入:


    # Set JDK 环境变量
    export JAVA_HOME=/usr/local/JAVA ##JDK路径
    export PATH=/bin:/jre/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/root/bin
    export CLASSPATH=/lib/:/jre/lib:

    # 运行:source /etc/profile 使配置文件生效

    source /etc/profile


    # 检查验证是否安装成功

    [root@tomcat_jvm software]# /usr/local/JAVA/bin/java -version
    java version "1.8.0_161"
    Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)


    4 .安装tomcat 8.5

    [root@tomcat_jvm software]# tar zxvf apache-tomcat-8.5.28.tar.gz

    # 根据部署的内容将apache-tomcat改名
    [root@tomcat_jvm software]# cp -r apache-tomcat-8.5.28 /data/Tomcat-Pay

    [root@tomcat_jvm software]# cd /data/Tomcat-Pay/
    [root@tomcat_jvm Tomcat-Pay]# ls
    bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work

    #===============================================================================
    # 安装后配置:Tomcat启动、停止等

    # 启动

    [root@tomcat_jvm bin]# /data/Tomcat-Pay/bin/startup.sh

    # 停止
    [root@tomcat_jvm bin]# /data/Tomcat-Pay/bin/shutdown.sh

    # 查看版本信息
    [root@tomcat_jvm bin]# /data/Tomcat-Pay/bin/version.sh

    # 输出结果:
    Using CATALINA_BASE: /data/Tomcat-Pay
    Using CATALINA_HOME: /data/Tomcat-Pay
    Using CATALINA_TMPDIR: /data/Tomcat-Pay/temp
    Using JRE_HOME: /usr/local/JAVA
    Using CLASSPATH: /data/Tomcat-Pay/bin/bootstrap.jar:/data/Tomcat-Pay/bin/tomcat-juli.jar
    Server version: Apache Tomcat/8.5.28
    Server built: Feb 6 2018 23:10:25 UTC
    Server number: 8.5.28.0
    OS Name: Linux
    OS Version: 3.10.0-327.el7.x86_64
    Architecture: amd64
    JVM Version: 1.8.0_161-b12
    JVM Vendor: Oracle Corporation


    5. 配置开机启动
    [root@tomcat_jvm bin]# chmod +x /etc/rc.d/rc.local

    [root@tomcat_jvm bin]# echo '/data/Tomcat-Pay/bin/startup.sh' >> /etc/rc.d/rc.local



    二 安装apr扩展提升tomcat性能

    Tomcat 8.5 基于 Apache Portable Runtime(APR)库性能优化



    Tomcat可以使用Apache Portable Runtime来提供卓越的性能及可扩展性,更好地与本地服务器技术的集成。Apache Portable Runtime是一个高度可移植的库,位于Apache HTTP Server 2.x的核心。APR有许多用途,包括访问高级IO功能(如sendfile,epoll和OpenSSL),操作系统级功能(随机数生成,系统状态等)以及本地进程处理(共享内存,NT管道和Unix套接字)。

    这些功能不仅仅是一个后端集中的技术,还可以让Tomcat成为通用的网络服务器,可以实现与本地的其他Web技术更好的集成,并使Java成为一个完整的网络服务器平台。

    官方要求:

    APR 1.2+ development headers (libapr1-dev package)
    OpenSSL 1.0.2+ development headers (libssl-dev package)
    JNI headers from Java compatible JDK 1.4+
    GNU development environment (gcc, make)

    生产环境:

    CentOS Linux release 7 (Core) x86 64
    Server version: Apache Tomcat/8.5.28
    java version “1.8.0_131”


    1.安装相关依赖包

    # yum -y install gcc gcc-c++ libtool* autoconf automake expat-devel perl perl-devel

    2.下载安装包 http://mirror.bit.edu.cn/apache/apr/

    # cd /software/
    # wget http://mirror.bit.edu.cn/apache/apr/apr-1.6.2.tar.gz
    # wget http://mirror.bit.edu.cn/apache/apr/apr-iconv-1.2.2.tar.gz
    # wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.0.tar.gz
    # wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz

    备用地址 https://mirrors.tuna.tsinghua.edu.cn/apache//apr/
    wget http://219.239.26.11/files/224600000AE1B9A7/mirror.bit.edu.cn/apache//apr/apr-1.6.3.tar.gz
    wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz
    wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-iconv-1.2.2.tar.gz
    wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz


    3.安装APR

    # tar zxvf apr-1.6.2.tar.gz
    # cd apr-1.6.2
    # vim configure

    如有问题可以修改该值,经测试并没有发现该问题
    默认值:
    RM='$RM'
    修改为:
    RM='$RM -f'

    # ./configure --prefix=/usr/local/apr
    # make && make install
    4.安装apr-iconv

    # tar zxvf apr-iconv-1.2.1.tar.gz
    # cd apr-iconv-1.2.1
    # ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
    # make && make install
    5.安装apr-util

    # tar zxvf apr-util-1.6.0.tar.gz
    # cd apr-util-1.6.0
    # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
    # make && make install
    6.安装OpenSSL

    # tar zxvf openssl-1.1.0f.tar.gz
    # cd openssl-1.1.0f
    # ./config --prefix=/usr/local/openssl
    # make -j 4 && make install
    7.安装tomcat-native

    # cd /usr/local/tomcat/bin/
    # tar zxvf tomcat-native.tar.gz
    # cd tomcat-native-1.2.12-src/native
    # ./configure --with-ssl=/usr/local/openssl --with-apr=/usr/local/apr --with-java-home=/usr/local/JAVA
    # make && make install
    注意:如果以上 configure 失败,可以执行 make distclean 清除

    8.添加变量内容

    # vim /etc/profile.d/jdk.sh
    export LD_LIBRARY_PATH=/usr/local/apr/lib:$LD_LIBRARY_PATH
    # source /etc/profile.d/jdk.sh
    至此APR安装成功。

    9.接下来需要修改tomcat配置文件中的APR运行模式,并测试是否安装成功。

    # vim /usr/local/tomcat/conf/server.xml
    默认值:

    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
    修改为:

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
    connectionTimeout="20000"
    redirectPort="8443" />
    默认值:

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    修改为:

    <Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />
    10.现在重启tomcat服务,并查看启动日志

    # systemctl restart tomcat
    # cat /usr/local/tomcat/logs/catalina.out
    ...
    INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
    INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
    INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
    INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
    INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
    ...
    注意:如果遇到上面的提示找不到基于APR的Apache Tomcat Native库,因此无法使用APR模式启动。

    解决方案:

    # cp -R /usr/local/apr/lib/* /usr/lib64
    # cp -R /usr/local/apr/lib/* /usr/lib
    再次重启tomcat,并查看启动日志

    # cat /usr/local/tomcat/logs/catalina.out
    ...
    INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
    INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8009"]
    ...
    可以看到已经以apr协议模式启动成功,经基于APR的技术web压力测试,Tomcat的性能飙升。

    三 tomcat 调整:


    1. 线程池(Thread Pool)优化

    编辑“Tomcat安装目录/conf/server.xml”文件,找到如下内容

    <!--

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

    maxThreads="150" minSpareThreads="4"/>

    -->


    取消注释,参数做如下调整

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

    maxThreads="1000" minSpareThreads="25"

    maxIdleTime="600000" acceptCount="500"/>


    参数说明:

    name 这个是线程池的名字,必须唯一,默认即可,我们在后面的配置里要用到这个东西
    namePrefix 线程的名字前缀,用来标记线程名字的,这样每个线程就用这个前缀加上线程编号了,比如 catalina-exec-1 catalina-exec-2
    maxThreads 线程池可以容纳的最大线程数,tomcat使用线程来处理接收的请求每一个线程处理一个请求,这个值决定了同时能够处理的最大请求数,缺省值为200
    minSpareThreads 最小的保持活跃的线程数量,缺省值为4(tomcat5有此参数,而tomcat6无此参数,到了tomcat7又重新使用此参数,顺便提下5和7中这两个参数含义并不相同有兴趣可以查看官方文档)
    maxIdleTime  关闭一个空闲线程之前允许空闲线程持续的时间,只有当前空闲线程数大于minSpareThread的值,才会关闭空闲线程
    acceptCount 当所有可用的请求处理线程都被使用的时候,连接请求队列的最大长度。当该队列满了以后的所有请求都被拒绝,缺省值为10

    顺便提下如下3个参数maxSpareThreads、maxProcessors和minProcessors

    maxSpareThreads:允许存在的空闲线程的最大数量,tomcat5及以前版本才有的参数,tomcat6和tomcat7均无此参数
    minProcessors:最小空闲连接线程数,用于提高系统处理性能
    maxProcessors:最大连接线程数,即并发处理的最大请求数
    maxProcessors和minProcessors是tomcat4才有的,tomcat5之后的版本均取消了这2个参数,tomcat4基本无人在用了吧,所以优化的时候别再把这2个参数加上了



    2. 连接器(Connector)优化

    编辑“Tomcat安装目录/conf/server.xml”文件,找到如下内容将其注释掉

    <Connector port="8080" protocol="HTTP/1.1"

    connectionTimeout="20000"

    redirectPort="8443" />



    再找到如下内容,取消注释

    <!--

    <Connector executor="tomcatThreadPool"

    port="8080" protocol="HTTP/1.1"

    connectionTimeout="20000"

    redirectPort="8443" />

    -->



    参数做如下调整

    <Connector executor="tomcatThreadPool"

    port="8080" protocol="HTTP/1.1"

    URIEncoding="UTF-8" enableLookups="false" disableUploadTimeout="true"

    connectionTimeout="20000" keepAliveTimeout="15000" maxKeepAliveRequests="1000"

    useURIValidationHack="false" compression="on" compressionMinSize="2048"

    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

    redirectPort="8443"/>


    +---------------------------------------------------------------+
    |
    |
    |
    |
    |
    |
    +--------------------------------------参数说明-------------------

    AJP/1.3协议负责和其他HTTP服务器建立连接,监听的是8009端口,比如tomcat和apache或者iis集成时使用这个连接器,此时则需优化8009端口的Connector。

    <!-- Define an AJP 1.3 Connector on port 8009 -->

    <Connector port="8009" protocol="AJP/1.3"

    URIEncoding="UTF-8" enableLookups="false" disableUploadTimeout="true"

    connectionTimeout="20000" keepAliveTimeout="15000" maxKeepAliveRequests="1000"

    useURIValidationHack="false" compression="on" compressionMinSize="2048"

    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

    redirectPort="8443" />

    # 如果使用 nginx的话,可以直接注释掉AJP


    参数说明:

    executor="tomcatThreadPool" 在 Connector里指定使用共享线程池的名称
    port="8080" 指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求
    protocol="HTTP/1.1" 负责建立HTTP连接,web应用通过浏览器访问tomcat服务器用的就是这个连接器,默认监听的是8080端口。所以我们优化的是8080端口的Connector
    URIEncoding="UTF-8" URI解码所使用的字符集,只影响GET请求的URI解码,不影响post的解码
    enableLookups="false" 禁用DNS查询,默认值为true,为了提高处理能力应设置为false
    disableUploadTimeout="true" 允许servlet container在一个servlet执行的时候,使用一个不同的,更长的连接超时。最终的结果是给servlet更长的时间以便完成其执行,或者在数据上载的时候更长的超时时间。如果没有指定默认为false
    connectionTimeout="20000" 在Connector接受一个连接以后,等待发生第一个请求的时间,单位毫秒。缺省值为60000(60秒)
    keepAliveTimeout="15000" 在一个长连接中2次请求之间的最大间隔时间,超过此时间连接断开,单位毫秒
    maxKeepAliveRequests="1000" 在server关闭连接之前,接受的HTTP请求的最大数目。如果该值设为1,会禁止HTTP/1.0保活,同时也会禁止HTTP/1.1保活和pipelining。如果没有指定默认值100。
    useURIValidationHack="false" 减少它对一些url的不必要的检查从而减省开销
    compression="on" 设为on开启Connector使用HTTP/1.1的GZIP压缩,可节省服务器带宽
    compressionMinSize="2048" 启用压缩的输出内容大小,这里面设置为2KB
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 压缩文件的类型
    redirectPort="8443" 如果Connector支持非SSL请求,在收到一个要求使用SSL传输的请求以后,Catalina会自动将该请求重定向到这里指定的端口号

    3. JAVA虚拟机(JVM)优化

    注意调优JVM需要了解使用的JDK是什么版本,随着JDK版本发展有新参数引入,同时有旧参数废弃。本文档以JDK7为例进行调优



    JDK7的JVM内存由Heap(堆空间)和Perm(持久代)组成. 其中Heap = {Old + young = { Eden , from, to } }

    JDK8的JVM已经将Perm(持久代)从内存空间移除

    Linux平台,编辑“Tomcat安装目录/conf/catalina.sh”文件,该文件开头是一大段由#包裹的注释,在注释的最后添加如下内容

    export JAVA_OPTS="-server -Xms3072M -Xmx3072M -Xmn512M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=5 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Djava.awt.headless=true"




    如果想要打印JVM运行日志信息,则可以再添加如下参数,-Xloggs指定日志路径

    -Xloggc:/path/jvm.log -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCDetails




    Windows平台,则编辑“Tomcat安装目录/conf/catalina.bat”文件

    set JAVA_OPTS=-server -Xms3072M -Xmx3072M -Xmn512M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=5 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Djava.awt.headless=true



    如果想要打印JVM运行日志信息,则可以再添加如下参数,-Xloggs指定日志路径

    -Xloggc:D:pathjvm.log -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCDetails



    参数说明:

    -server 指定JAVA虚拟机运行在server模式
    -Xms 初始Heap内存大小,本文档设置了3G,需要结合服务器CPU核数,内存总量等实际情况来设置合适数值,此值并非越大越好,过大将增加垃圾回收的压力
    -Xmx 最大Heap内存大小,本文档设置了3G,需要结合服务器CPU核数,内存总量等实际情况来设置合适数值,此值并非越大越好,过大将增加垃圾回收的压力
    -Xmn 新生代内存大小
    -Xss 每个线程的堆栈大小
    -XX:+AggressiveOpts 启用JVM开发团队最新的调优成果,例如:编译优化,偏向锁,并行老年代收集,JDK5.6后引入,JDK6默认开启
    -XX:+UseBiasedLocking 启用一个优化了的线程锁(偏向锁),JDK5.6后引入,JDK6默认开启
    -XX:PermSize 初始持久代内存大小,需要注意永久代在JDK8中被完全的移除了,永久代的参数-XX:PermSize和-XX:MaxPermSize也被移除了
    -XX:MaxPermSize 最大持久代内存大小,需要注意永久代在JDK8中被完全的移除了,永久代的参数-XX:PermSize和-XX:MaxPermSize也被移除了
    -XX:+DisableExplicitGC 禁止显示的调用System.gc()方法进行GC
    -XX:+UseConcMarkSweepGC 使用并发标记清除(CMS)垃圾收集器 它是对年老代进行垃圾收集的。CMS收集器通过多线程并发进行垃圾回收,尽量减少垃圾收集造成的停顿。采用这种垃圾收集器默认会开启-XX:+UseParNewGC参数对新生代使用Parallel GC(并行垃圾回收器)
    -XX:+UseParNewGC 新生代使用Parallel GC(并行垃圾回收器),如果老年代使用了CMS垃圾回收期,则新生代默认就是这种垃圾回收器
    -XX:+CMSParallelRemarkEnabled CMS垃圾回收器回收对象时,应用有2次停顿,第一次是初始标记,第二次是重新标记,开启并行remark可以降低重新标记停顿时间,
    -XX:+UseCMSCompactAtFullCollection CMS不会整理堆碎片,为了防止堆碎片引起full gc,设置此参数使CMS垃圾回收时进行合并碎片,开启这个选项一定程度上会影响性能
    -XX:CMSMaxAbortablePrecleanTime
    -XX:+CMSClassUnloadingEnabled 开启CMS回收持久代,避免Perm区满引起的full gc
    -XX:LargePageSizeInBytes 指定Java heap的分页页面大小
    -XX:+UseFastAccessorMethods 将get(),set()方法转成本地代码,默认开启
    -XX:+UseCMSInitiatingOccupancyOnly 只有达到-XX:CMSInitiatingOccupancyFraction指定的使用百分比才进行老年代的垃圾回收
    -XX:CMSInitiatingOccupancyFraction 指定老年代在使用了多少百分比空间时开始进行垃圾回收,JDK5默认68%,JDK6默认92%
    -Djava.awt.headless 解决J2EE工程中的图表工具在Linux/Unix环境下会导致图片显示不出来
    -Xloggc 指定JVM日志输出到文件
    -XX:+PrintGCDateStamps 打印GC发生的时间,JDK6和JDK7才支持,如果是JDK5请使用-XX:+PrintGCTimeStamps
    -XX:+PrintGCApplicationStoppedTime 打印GC造成应用停顿的时间
    -XX:+PrintGCApplicationConcurrentTime 打印GC时应用并发执行的时间
    -XX:+PrintGCDetails 打印GC详细信息

    4. 调整Tomcat Connector的运行模式简单介绍一下直接使用apr (上面已经配置为apr模式)

    首先大致了解Tomcat Connector的三种运行模式:bio、nio和apr

    bio

    bio(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。



    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)更好的并发运行性能。要让Tomcat以nio模式来运行也比较简单,我们只需要在Tomcat安装目录/conf/server.xml文件中将如下配置:

    <Connector port="8080" protocol="HTTP/1.1"

    connectionTimeout="20000"

    redirectPort="8443" />


    中的protocol属性值改为org.apache.coyote.http11.Http11NioProtocol即可

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"

    connectionTimeout="20000"

    redirectPort="8443" />



    此时,我们就可以在Tomcat Manager中看到当前服务器状态页面的HTTP协议的Connector运行模式已经从http-bio-8080变成了nio



    四 系统优化:
    1. 修改pam限制
    2. 修改硬盘算法
    3. 内核参数
    4. 关闭无用服务
    5. 等等待续




    五 安全设置:


    1.编辑修改配置文件:

    # vim /usr/program/tomcat8/conf/server.xml

    2.禁用8005端口

    telnet localhost 8005 然后输入 SHUTDOWN 就可以关闭 Tomcat,为了安全我们要禁用该功能

    默认值:

    <Server port="8005" shutdown="SHUTDOWN">
    修改为:

    <Server port="-1" shutdown="SHUTDOWN">


    3.应用程序安全&关闭自动部署
    默认值:

    <Host name="localhost" appBase="webapps"
    unpackWARs="true" autoDeploy="true">
    修改为:

    <Host name="localhost" appBase="webapps"
    unpackWARs="false" autoDeploy="false" reloadable="false">

    4.maxThreads 连接数限制修改配置

    默认值:

    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="150" minSpareThreads="4"/>
    -->
    修改为:

    <Executor
    name="tomcatThreadPool"
    namePrefix="catalina-exec-"
    maxThreads="500"
    minSpareThreads="30"
    maxIdleTime="60000"
    prestartminSpareThreads = "true"
    maxQueueSize = "100"
    />
    参数解释:

    maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断
    minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
    maxIdleTime:如果当前线程大于初始化线程,那空闲线程存活的时间,单位毫秒,默认60000=60秒=1分钟。
    prestartminSpareThreads:在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
    maxQueueSize:最大的等待队列数,超过则拒绝请求

    5.Connector 参数优化配置

    默认值:

    <Connector
    port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    />
    修改为:

    <Connector
    executor="tomcatThreadPool"
    port="8080"
    protocol="org.apache.coyote.http11.Http11Nio2Protocol"
    connectionTimeout="60000"
    maxConnections="10000"
    redirectPort="8443"
    enableLookups="false"
    acceptCount="100"
    maxPostSize="10485760"
    maxHttpHeaderSize="8192"
    compression="on"
    disableUploadTimeout="true"
    compressionMinSize="2048"
    acceptorThreadCount="2"
    compressableMimeType="text/html,text/plain,text/css,application/javascript,application/json,application/x-font-ttf,application/x-font-otf,image/svg+xml,image/jpeg,image/png,image/gif,audio/mpeg,video/mp4"
    URIEncoding="utf-8"
    processorCache="20000"
    tcpNoDelay="true"
    connectionLinger="5"
    server="Server Version 11.0"
    />
    参数解释:

    protocol:Tomcat 8 设置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol
    protocol:Tomcat 6 设置 nio 更好:org.apache.coyote.http11.Http11NioProtocol
    protocol:Tomcat 8 设置 APR 性能飞快:org.apache.coyote.http11.Http11AprProtocol 更多详情:《Tomcat 8.5 基于 Apache Portable Runtime(APR)库性能优化》
    connectionTimeout:Connector接受一个连接后等待的时间(milliseconds),默认值是60000。
    maxConnections:这个值表示最多可以有多少个socket连接到tomcat上
    enableLookups:禁用DNS查询
    acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100。
    maxPostSize:设置由容器解析的URL参数的最大长度,-1(小于0)为禁用这个属性,默认为2097152(2M) 请注意, FailedRequestFilter 过滤器可以用来拒绝达到了极限值的请求。
    maxHttpHeaderSize:http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
    compression:是否启用GZIP压缩 on为启用(文本数据压缩) off为不启用, force 压缩所有数据
    disableUploadTimeout:这个标志允许servlet容器使用一个不同的,通常长在数据上传连接超时。 如果不指定,这个属性被设置为true,表示禁用该时间超时。
    compressionMinSize:当超过最小数据大小才进行压缩
    acceptorThreadCount:用于接受连接的线程数量。增加这个值在多CPU的机器上,尽管你永远不会真正需要超过2。 也有很多非维持连接,您可能希望增加这个值。默认值是1。
    compressableMimeType:配置想压缩的数据类型
    URIEncoding:网站一般采用UTF-8作为默认编码。
    processorCache:协议处理器缓存的处理器对象来提高性能。 该设置决定多少这些对象的缓存。-1意味着无限的,默认是200。 如果不使用Servlet 3.0异步处理,默认是使用一样的maxThreads设置。 如果使用Servlet 3.0异步处理,默认是使用大maxThreads和预期的并发请求的最大数量(同步和异步)。
    tcpNoDelay:如果设置为true,TCP_NO_DELAY选项将被设置在服务器套接字,而在大多数情况下提高性能。这是默认设置为true。
    connectionLinger:秒数在这个连接器将持续使用的套接字时关闭。默认值是 -1,禁用socket 延迟时间。
    server:隐藏Tomcat版本信息,首先隐藏HTTP头中的版本信息

    6.隐藏或修改 Tomcat 版本号

    # cd /usr/local/tomcat/lib/
    # unzip catalina.jar
    # cd org/apache/catalina/util
    # vim ServerInfo.properties
    server.info=Apache Tomcat/8.5.16
    server.number=8.5.16.0
    server.built=Jun 21 2017 17:01:09 UTC
    将以上去掉或修改版本号即可。

    7.删除禁用默认管理页面以及相关配置文件

    # rm -rf /usr/local/apache-tomcat-8.5.16/webapps/*
    # rm -rf /usr/local/apache-tomcat-8.5.16/conf/tomcat-users.xml

    参考内容:
    https://tomcat.apache.org/tomcat-8.5-doc/config/
    https://github.com/judasn/Linux-Tutorial/blob/master/Tomcat-Install-And-Settings.md
    http://wiki.jikexueyuan.com/project/linux-in-eye-of-java/Tomcat-Install-And-Settings.html
    http://netkiller.github.io/journal/tomcat.html
    http://zjliu.me/2015/12/14/tomcat-config-connector/
  • 相关阅读:
    Forest Program(dfs方法---树上的环)
    RMQ+差分处理(Let Them Slide)Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)
    线段树维护最后一个0的位置(Restore Permutation)Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)
    n*n矩阵 每行每列XOR为0(思维)
    区间DP(入门)括号匹配
    Dijkstra(模板)
    线段树--扫描线(模板)自下而上
    后缀数组 LCP--模板题
    状压DP--Rotate Columns (hard version)-- Codeforces Round #584
    01背包方案数(变种题)Stone game--The Preliminary Contest for ICPC Asia Shanghai 2019
  • 原文地址:https://www.cnblogs.com/lhlucky/p/tomcat.html
Copyright © 2020-2023  润新知