• tomcat配置优化


    tomcat配置文件详解:
    tomcat目录:

    bin:                           #存放启动和关闭tomcat脚本;
    conf:                          #存放不同的配置文件(server.xml和web.xml);
    doc:                           #存放tomcat文档;
    lib/japser/common:             #存放tomcat运行需要的库文件(JARS);
    logs:                          #存放tomcat执行的log文件;
    src:                           #存放tomcat的源代码;
    webapps:                       #tomcat的主要Web发布目录(包括应用程序示例);
    work:                          #存放jsp编译后生产的class文件;
    tomcat加载类:
    Bootstrap($JAVA_HOME/jre/lib/ext/*.jar)
    System($CLASSPATH/*.class和指定的jar) 
    Common($CATALINA_HOME/common 下的classes,lib,endores三个子目录) 
    Catalina ($CATALINA_HOME/server/下的classes和lib目录仅对Tomcat可见)
    &Shared($CATALINA_HOME/shared/下的classes和lib目录以及
    $CATALINA_HOME/lib目录)仅对Web应用程序可见,对Tomcat不可见
    WebApp($WEBAPP/Web-INF/*仅对该WEB应用可见classes/*.classlib/*.jar)
    1)     加载类和资源的顺序为:
    2)     /Web-INF/classes
    3)     /Web-INF/lib/*.jar
    4)     Bootstrap
    5)     System
    6)     $CATALINA_HOME/common/classes
    7)     $CATALINA_HOME/common/endores/*.jar
    8)     $CATALINA_HOME/common/lib/*.jar
    9)     $CATALINA_HOME/shared/classes
    10)     $CATALINA_HOME/shared/lib/*.jar
    server.xml配置文件:

     server: 
    port 指定一个端口,这个端口负责监听关闭tomcat的请求 
    shutdown 指定向端口发送的命令字符串 
     service:  name 指定service的名字 
    Connector (表示客户端和service之间的连接):
    port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求 
    minProcessors 服务器启动时创建的处理请求的线程数 
    maxProcessors 最大可以创建的处理请求的线程数 
    enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查
    询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址 
    redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号 
    acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理
    队列中的请求数,超过这个数的请求将不予处理 
    connectionTimeout 指定超时的时间数(以毫秒为单位) 
    Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求):
    defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的 
    Context (表示一个web应用程序):
    docBase 应用程序的路径或者是WAR文件存放的路径 
    path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/
    reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序 
    host (表示一个虚拟主机):
    name 指定主机名 
    appBase 应用程序基本目录,即存放应用程序的目录 
    
    unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接
    从WAR文件中运行应用程序 ;
    
    Logger (表示日志,调试和错误信息):
    className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口 
    prefix 指定log文件的前缀 
    suffix 指定log文件的后缀 
    timestamp 如果为true,则log文件名中要加入时间,如下
    Realm (表示存放用户名,密码及role的数据库):
    className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口 
    Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样):
    className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息 
    directory(指定log文件存放的位置):
    pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请
    求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多。
    tomcat连接器选择:

    Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式
    bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O操作(即Java.io包及其子包)。
    默认的模式,性能最差,没有经过任何优化处理和支持。
    nio(non-blocking I/O),java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API。拥有比传统I/O操作(bio)更好的并发运行性能。
    要让Tomcat以nio模式来运行,修改配置文件:tomcat/conf/server.xml
    vim 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" />
    apr(Apache Portable Runtime/Apache可移植运行时库),Tomcat将以JNI的
    形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。从操作系统级别来解决异步的IO问题,大幅度的提高性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。
    要让Tomcat以apr模式来运行,必须安装apr和native
    安装apr:
    yum -y install apr apr-devel
    安装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
    整合Tomcat apr:
    设置环境变量
    方法一:在/bin/catalina.sh中增加1行:
    (在echo “Using CATALINA_BASE: $CATALINA_BASE”的上一行添加)
    CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
    方法二:在/etc/profile中加入:
    export CATALINA_OPTS=-Djava.library.path=/usr/local/apr/lib
    source /etc/profile
    修改配置文件:tomcat/conf/server.xml
    vim 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.Http11AprProtocol"
                    connectionTimeout="20000"
                    redirectPort="8443" />
    tomcat性能优化差数剖析:
    线上环境使用默认tomcat配置文件,性能很一般,为了满足大量用户的访问,需要对tomcat进行参数性能优化,具体优化的地方如下:
    Ø  Linux内核的优化
    Ø  服务器资源配置的优化
    Ø  Tomcat参数优化
    Ø  配置负载集群优化
    这里着重讲解tomcat参数的优化: server.xml文件,关闭DNS查询、配置最大并发等参数。
    maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
    acceptCount:当tomcat启动的线程数达到最大时,接受排队的请求个数,默认值为100
    当然这些值都不是越大越好,需要根据实际情况来设定。可以基于测试的基础上来不断的调优分析。
    <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" />
    Bin/catalina.sh JVM参数优化,添加如下内容:
    CATALINA_OPTS="$CATALINA_OPTS -Xms512M -Xmx1024M -Xmn100M -XX:SurvivorRatio=4 -XX:+UseConcMarkS
    weepGC -XX:CMSInitiatingOccupancyFraction=82 -DLOCALE=UTF-16LE  -DRAMDISK=/ -DUSE_RAM_DISK=ture
     -DRAM_DISK=true -Djava.rmi.server.hostname=192.168.111.128 -Dcom.sun.management.jmxremote.port
    =10000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
    
    配置多个tomcat实例,方法也很简单,只需要在服务器上cp多个tomcat,然后修改三个端口和发布目录即可,然后分别启动即可。
    为了提升整个网站的性能,还需要在tomcat前面架设Nginx web反向代理服务器,用以提高用户高速访问。
    tomcat生产环境优化:

    Tomcat是目前企业中使用最广泛的WEB容器,主要是用于发布和处理静态网页+JSP动态网页的,作为运维人员最主要的职责就是维护Tomcat WEB服务器的稳定,优化其性能,Tomcat性能优化步骤和参数如下。
    1)Tomcat和JDK版本选择优化;
    通常来讲Tomcat跟JDK版本严格的版本选择,但是在实际使用中,可以通过压测工具测试其组合版本的性能,例如:
      JDK1.6 Tomcat6.x
      JDK1.7 Tomcat7.x
      JDK1.8 Tomcat8.x
    2)Tomcat服务器连接器选择;
    Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式,在生产环境推荐使用nio和apr方式,从请求处理方式和操作系统级别来解决异步的IO问题,大幅度的提高性能。
    3)关闭Tomcat server.xml文件中不必要的标签和参数;
    Tomcat标签有很多,通常来讲,有部分标签对于业务访问没有需求,可以删除,从而可以加快配置文件查询或者管理便捷。可以删除的标签:
      <GlobalNamingResources>
      <Realm>
      <Context>
    4)调整Tomcat WEB对连接数相关参数;
      minSpareThreads:最小空闲线程数
      maxSpareThreads:最大空闲线程数
      maxThreads:最大线程数,大并发请求时
      acceptCount:请求队列排队个数
      ConnectionTimeout:网络连接超时
    5)调整Tomcat JVM虚拟机内存设置;
      Xmx2048M,设置Java虚拟机的堆的最大可用内存大小
      Xms2048M,设置Java虚拟机的堆的初始值内存大小
      Xmn512M,设置年轻代内存大小,一般设置为Xmx的1/4
      
      方法一:可以在/etc/profile文件末行中添加
     export CATALINA_OPTS=" -Xms256M -Xmx1024M "
     source /etc/profile
      方法二:/usr/local/tomcat/bin/catalina.sh文件中添加
      CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib -Xms256M -Xmx1024M -Xss512k -XX:NewSize=2250M -XX:MaxNewS
    ize=2250M -XX:PermSize=128M -XX:MaxPermSize=256M  -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicit
    GC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15 -XX:+CMSParallelRemarkEnabled -XX:+UseC
    MSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupa
    ncyOnly -Duser.timezone=Asia/Shanghai -Djava.awt.headless=true"
    关闭tomcat DNS反查功能:配置文件中server.xml

    将参数设置为false,enableLookups=”false”,表示关闭DNS域名反查,提高处理能力。
    tomcat生产环境的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="off" />
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
      <Service name="Catalina">
        <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
               connectionTimeout="20000" 
               redirectPort="8443" 
               maxThreads="4096"
               minSpareThreads="100" 
               acceptCount="10000"
               disableUploadTimeout="true"
               enableLookups="false"  
               URIEncoding="UTF-8" />
        <Engine name="Catalina" defaultHost="localhost">
          <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>
  • 相关阅读:
    HDU 5033 Building --离线+单调栈
    HDU 5025 Saving Tang Monk --BFS
    Codeforces Round #267 Div.2 D Fedor and Essay -- 强连通 DFS
    Codeforces Round #267 Div2 C George and Job --DP
    POJ 3150 Cellular Automaton --矩阵快速幂及优化
    TopCoder SRM 633 Div.2 500 Jumping
    HDU 4998 Rotate --几何
    一些语言方面的技巧
    HDU 5017 Ellipsoid 模拟退火第一题
    HDU 5015 233 Matrix --矩阵快速幂
  • 原文地址:https://www.cnblogs.com/fengyuanfei/p/14498025.html
Copyright © 2020-2023  润新知