美文网首页
tomcat8 性能优化

tomcat8 性能优化

作者: SRE运维博客 | 来源:发表于2019-08-16 09:39 被阅读0次

    Tomcat配置相关说明

    1.开启Tomcat APR运行模式,优化并发性能

    2.优化配置JVM

    3.配置共享线程池

    4.访问日志配置接口请求处理时间

    5.tomcat日志切割

    6.配置tomcat隐藏版本号

    7.配置tomcat开机自启动

    8.配置tomcat禁用(修改)8005端口

    9.修改tomcat项目目录和支持热部署

    生产实例配至说明


    Tomcat配置相关说明

    /usr/local/tomcat

    主目录(安装目录)

    bin

    存放windows或linux平台上启动或关闭的Tomcat的脚本文件

    conf

    存放Tomcat的各种全局配置文件,其中最主要的是server.xml和web.xml

    lib

    存放Tomcat运行需要的库文件(JARS)

    logs

    存放Tomcat执行时的LOG文件

    webapps

    Tomcat的主要Web发布目录(包括应用程序事例)htdocs(html php)

    work

    存放jsp编译后产生的class文件

    [root@tomcat1 ~]# ls /usr/local/tomcat/conf/

    catalina.policy

    权限控制配置文件

    catalina.properties

    Tomcat属性配置文件

    context.xml

    上下文配置文件(selinux)

    logging.properties

    日志log相关配置文件

    server.xml

    主配置文件

    tomcat-users.xml

    manager-gui管理用户配置文件(Tomcat安装后生成的管理界面,该文件可开启访问)

    web.xml

    Tomcat的servlet,servlet-mapping,filter,MIME等相关配置

    server.xml

    主要配置文件,可修改启动端口,设置网站根目录,虚拟主机,开启https等功能。

    conf

    存放Tomcat的各种全局配置文件,其中最主要的是server.xml和web.xml

    1.开启Tomcat APR运行模式,优化并发性能

    yum install -y apr-devel openssl-devel gcc gcc-c++

    cd /home/tomcat8/bin

    tar -zxvf tomcat-native.tar.gz

    cd tomcat-native-1.2.16-src/native

    ./configure --with-apr=/usr/bin/apr-1-config --with-ssl=/usr --with-java-home=/usr/local/jdk

    make

    make install

    ln -s /usr/local/apr/lib/libtcnative* /usr/lib64/

    修改server.xml

    vim /home/tomcat8/conf/server.xml

    把protocol改成下面找个

    <Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />

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

                  connectionTimeout="20000"

                  redirectPort="8443" />

    然后重启tomcat,观察日志tailf /home/tomcat8/logs/catalina.out

    2017-10-12 15:31:19,032 - Initializing ProtocolHandler ["http-apr-8080"]

    2017-10-12 15:31:19,051 - Starting ProtocolHandler ["ajp-apr-8009"]

    这样就成功了

    2.优化配置JVM

    vim /home/tomcat8/bin/catalina.sh

    编辑catalina.sh配置文件

    [root@tomcat1 ~]# vim /home/tomcat/apache-tomcat-9.0.10/bin/catalina.sh

    # OS specific support. $var _must_ be set to either true or false.下面添加

    JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+UseParallelGCThreads=8 -XX:CMSInitiatingOccupancyFraction=80 -XX:

    +UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:-PrintGC -XX:-PrintGCDetails -XX:-PrintGCTimeStamps -Xloggc:../logs/gc.log"

    参数描述

    -Xms

    堆内存初始大小,单位m、g

    -Xmx

    堆内存最大允许大小,一般不要大于物理内存的80%

    -XX:PermSize

    非堆内存初始大小,一般应用设置初始化200m,最大1024m就够了

    -XX:MaxPermSize

    非堆内存最大允许大小

    -XX:+UseParallelGCThreads=8

    并行收集器线程数,同时有多少个线程进行垃圾回收,一般与CPU数量相等

    -XX:+UseParallelOldGC

    指定老年代为并行收集

    -XX:+UseConcMarkSweepGC

    CMS收集器(并发收集器)

    -XX:+UseCMSCompactAtFullCollection

    开启内存空间压缩和整理,防止过多内存碎片

    查看网上说都是内存的1/2

    #还有很多的参数,我也不甚了解,就不写了

    https://www.cnblogs.com/grefr/p/6089153.html

    3.配置共享线程池

    vim /home/tomcat8/conf/server.xml

    <!--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"/>

    把这坨代码的注释去掉,这里启用tomcatThreadPool,并且定义maxThreads="1000" minSpareThreads="100"最大1000个线程,最小空闲线程200

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

                  connectionTimeout="20000"

                  redirectPort="8443" />-->

        <!-- A "Connector" using the shared thread pool-->

    然后把默认这坨代码给注释掉,把下面的代码取消注释

        <Connector executor="tomcatThreadPool"

                  port="8081" protocol="org.apache.coyote.http11.Http11AprProtocol"

                  connectionTimeout="20000"

                  redirectPort="8443" />

    如果你配置了APR,记得把协议改成APR,然后保存,重启tomcat 这样一来 就优化了并发性能和使用了共享线程池

    (据我线上的情况是日志里是200个线程循环使用1-200,然后又从1开始)

    4.访问日志配置接口请求处理时间

    这个好处在于分析代码中接口请求处理时间,比如反映网站打开慢,那么我们可以通过查看访问日志的接口请求处理时间,观察哪个接口的时间长,把锅甩给开发

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

                  prefix="localhost_access_log" suffix=".txt"

                  pattern="%h %l %u %t "%r" %s %b %D" />

    %D显示为毫秒

    %T显示为秒

    一般配置为%D毫秒

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

    prefix="localhost_access_log" suffix=".txt"

    pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts="false"/>

    5.tomcat日志切割

    就是切割catalina.out 默认这个是不切割的,这样问题是日志越来越大,不好管理,所以我们要切割一下,我的例子是一天一个日志

    wget https://files.cnblogs.com/files/crazyzero/cronolog-1.6.2.tar.gz

    rpm -ivh cronolog-1.6.2.rpm

    which

    /usr/sbin/cronolog

    做之前,把catalina.sh给复制一份做个备份

    cp catalina.sh catalina.sh.bak

    vim catalina.sh

    第一步:

    if [ -z "$CATALINA_OUT" ] ; then

      CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out

    fi

    修改为

    if [ -z "$CATALINA_OUT" ] ; then

      CATALINA_OUT="$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out

    fi

    第二步:

    touch "$CATALINA_OUT"

    修改为

    #touch "$CATALINA_OUT"

    第三步:

    org.apache.catalina.startup.Bootstrap "$@" start \

    >> "$CATALINA_OUT" 2>&1 "&"

    修改为

    org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \

    | /usr/sbin/cronolog "$CATALINA_OUT" >> /dev/null &  改上下两处

    重启tomcat,这就齐了

    6.配置tomcat隐藏版本号

    为了避免木马病毒针对某些版本进行攻击,因此我们需要隐藏或者伪装 Tomcat 的版本信息。针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为 catalina.jar

    cd /home/apache-tomcat-8.5.27/lib

    unzip catalina.jar

    进入org/apache/catalina/util 编辑配置文件ServerInfo.properties字段来实现来更改我们tomcat的版本信息

    cd org/apache/catalina/util

    vim ServerInfo.properties

    server.info=Apache Tomcat

    server.number=

    server.built=

    将修改后的信息压缩回jar包

    cd /home/apache-tomcat-8.5.27/lib

    jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties

    重启tomcat

    7.配置tomcat开机自启动

    注:需要catalina.sh里配置JAVA_HOME,CATALINA_HOME 不然会报错

    vim /home/tomcat8/bin/catalina.sh

    CATALINA_HOME=/home/apache-tomcat-8.5.27

    JAVA_HOME=/home/jdk1.8.0_181

    直接在最前边添加即可

    #测试的时候没有添加修改JAVA_HOME 和 CATALINA_HOME用systemctl 也可以用暂时没发现问题

    vim /usr/lib/systemd/system/tomcat.service

    [Unit] 

    Description=Tomcat

    After=syslog.target network.target remote-fs.target nss-lookup.target 

    [Service] 

    Type=forking 

    ExecStart=/home/tomcat/bin/startup.sh

    ExecReload=/home/tomcat/bin/startup.sh

    ExecStop=/home/tomcat/bin/shutdown.sh

    [Install]

    WantedBy=multi-user.target

    然后你就可以用下面的命令了

    systemctl start tomcat

    systemctl enable tomcat

    8.配置tomcat禁用(修改)8005端口

    telnet localhost 8005 然后输入 SHUTDOWN 就可以关闭 Tomcat,为了安全我们要修改(修改下8005端口)该功能

    默认值:

    <Server port="8005" shutdown="SHUTDOWN">

    修改为:

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

    #注意,网上写的是改成-1 问题是这样会导致无法关闭到tomcat,所有我觉得还是改个端口吧。这一条还是谨慎使用

    9.修改tomcat项目目录和支持热部署

    tomcat默认发布项目是http://ip:port/你的项目名称。

    但是有的时候开发需要直接访问到项目,不要后边加上项目名称,比如直接用java开发,直接用tomcat部署发布的网站

    方法一

    比较简单的办法 先把tomcat给启动起来,然后删除webapps下的ROOT这个目录,把你的项目(可能是个war包)改名为ROOT

    再把war包给删除,然后重启下tomcat

    rm -rf webapps/ROOT

    mv project ROOT

    rm -rf project.war

    sh bin/shutdown.sh

    sh bin/startup.sh

    这样就行了

    方法二

    修改server.xml,直接指定项目目录,就行了。这里还有一个问题,开发在项目开发过程中,经常要改动JAVA/JSP 文件,但是又不想从新启动服务器(服务器从新启动花时间),想直接获得(debug)结果

    所有需要运维给他开启热部署,热加载

    那么需要这样配置

    vim /home/tomcat8/conf/server.xml

    找下这块儿配置

    <Host name="localhost"  appBase="webapps"

                unpackWARs="true" autoDeploy="true">

            <Context debug="0" docBase="/home/tomcat/webapps/ROOT" path="" privileged="true" reloadable="true"/>

    热加载: 在server.xml -> context 属性中 设置 reloadable="true"

    热部署: 在server.xml -> context 属性中 设置 autoDeploy="true"

    项目发布目录: 在server.xml docBase="/home/tomcat/webapps/ROOT"

    #注意 这样就可以指定项目的发布目录,我这个项目是把ROOT里的东西给删除了,然后把项目包的东西塞进ROOT目录里边。通过一个脚本实现的。

    脚本如下

    #脚本的意思是就是从腾讯云COS上,把war包给下载下来,然后解压,然后给塞进webapps/ROOT/里面去,你可以再配合ansible scripts模块实现批量发布,我之前用ansible一下发布9台tomcat

    vim autoDeploy.sh

    ####################JUST AS YOU NEED###########################

    outdir=ROOT

    tomcat_home=/home/tomcat

    #################### DO NOT MODIFY ##################################

    webapp_dir=${tomcat_home}/webapps

    if [ -z $1 ]; then

      echo 'enter the url: '

      read url

    else

      url=$1

    fi

    fname=`basename $url`

    echo $fname

    wget $url -P /tmp

    rm -rf $webapp_dir/$outdir/*

    unzip -q /tmp/$fname -d $webapp_dir/$outdir

    rm -f /tmp/$fname

    jid=`ps -ef | grep java | grep -v grep | awk '{print $2}'`

    kill -9 $jid

    #nohup $tomcat_home/bin/startup.sh >> /dev/null

    $tomcat_home/bin/startup.sh

    day=`date +%Y-%m-%d`

    catalinaLog="catalina."$day".log"

    /home/apps_deploy/tomcat_action.log

    tail -f ${tomcat_home}/logs/${catalinaLog}

    这货运行就是 sh autoDeploy.sh 后边指向COS下的war包的URL

    生产实例配至说明

    #server.xml配置文件下:

    [root@tomcat1 ~]# vim /usr/local/tomcat8/conf/server.xml

    # <Connector executor="tomcatThreadPool"下面添加:

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

    maxThreads="1000"

    minSpareThreads="100"

    maxSpareThreads="200"

    acceptCount="1000"

    disableUploadTimeout="true"

    connectionTimeout="20000"

    URIEncoding="UTF-8"

    enableLookups="false"

    compression="on"

    compressionMinSize="2048"

    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"

    redirectPort="8443" />

    #参数说明:

    org.apache.coyote.http11.Http11NioProtocol:调整工作模式为Nio

    maxThreads:最大线程数,默认150。增大值避免队列请求过多,导致响应缓慢。

    minSpareThreads:最小空闲线程数。

    maxSpareThreads:最大空闲线程数,如果超过这个值,会关闭无用的线程。

    acceptCount:当处理请求超过此值时,将后来请求放到队列中等待。

    disableUploadTimeout:禁用上传超时时间

    connectionTimeout:连接超时,单位毫秒,0代表不限制

    URIEncoding:URI地址编码使用UTF-8

    enableLookups:关闭dns解析,提高响应时间

    compression:启用压缩功能

    compressionMinSize:最小压缩大小,单位Byte

    compressableMimeType:压缩的文件类型

    相关文章

      网友评论

          本文标题:tomcat8 性能优化

          本文链接:https://www.haomeiwen.com/subject/dsaxsctx.html