zoukankan      html  css  js  c++  java
  • tomcat优化(转)

    tomcat优化

     Activiti  分享牛  2017-02-08  1132℃

    本文重点讲解tomcat的优化。

    基本优化思路:

    1.         尽量缩短单个请求的处理时间。

    2.         尽量多的处理并发的请求能力。

    3.         一定要做到横向的扩展。

    1.1  tomcat优化

    tomcat默认的配置已经是经过优化的,留给开发人员优化的空间很小。主要调整的参数如下(实际项目开发中可以根据如下的参数进行测试):

    1.1.1           虚拟机优化

    根据机器的配置合理的分配tomcat内存。内存的配置在Tomcat启动的时候可以通过catalina.sh脚本中的JAVA_OPTS进行相应的设置。常见的配置如下:

     -server 启用jdk 的 server 版; 
      -Xms Java虚拟机初始化时的最小内存; 
      -Xmx java虚拟机可使用的最大内存(建议设置到物理内存的80%); 
      -XX: PermSize 内存永久保留区域 
      -XX:MaxPermSize 内存最大永久保留区域(默认32M) 。

    -XX:MaxNewSize 新生代内存的最大内存(默认16M)

    需要注意:Xms 与Xmx最好一致,以避免每次虚拟机GC调整堆的大小。因为默认的空余堆内存小于40%时,JVM就会增大堆的空间,一直到-Xmx的最大限制。空余堆内存大于70%时,JVM就会减少堆的空间,一直到- Xms 的最大限制。

    PermSize,MaxPermSize两个参数tomcat8中无需指定。从java8 之后,这两个参数的值如果内存不够,他可以自动扩充,另外,你修改变量值最好不要修改自带的catalina.sh,等脚本,官方说了,新建setenv.sh,每次启动关闭,都会自动调用这个去处理变量问题

    观察配置是否生效,可以通过 jmap –heap tomcat的进程号。

    我的配置如下:

    JAVA_OPTS=" -Xms512m -Xmx8192m -XX:MaxPermSize=256m "

    启动tomcat命令如下:

    ./catalina.sh run

    查看tomcat的端口号:

     ps -ef|grep /usr/local/devsoftware/apache-tomcat-8.5.11/bin

    验证配置的变量是否生效,使用命令如下:

    jmap -heap 3503

    程序的输出如下图所示

    通过上图可知,配置的变量已经生效。

    1.1.2           tomcat优化

    tomcat中 server.xml 中Connector的配置,常见的属性如下:

    1)   maxConnections:最大连接数。Bio模式中默认值等于maxThreads。Nio模式中默认值为10000。对于APR/native默认值为8192。

    2)   maxThreads:最大线程数。即同时处理任务的个数,默认为200。

    3)   acceptCount:当处理任务的线程达到最大个数的时候,接受排队的请求格式,默认100。

    4)   minSpareThreads:最小空闲线程个数,默认为10。

    5)   compression:是否开启gzip压缩。

    6)   compressableMimeType:哪些类型需要压缩,默认为text/html,text/xml,text/css,text/plain。

    7)   compressionMinSize:启用压缩的输出内容大小,默认2048。

    8)   enableLookups:是否开启反查域名,为了提高处理速度应该设置该值为false。

    9)   connectionTimeout:网络连接超时时间,单位为毫秒。设置为-1则表示永远不超时,通常设置2000即可。

    一、使用注意:如果为了提高并发量,需要提高设置maxThreads和acceptCount,通常两者设置一样即可。WebServer允许的最大连接受制于服务器的处理能力,可以通过ulimit –a命令进行查看。

    二、如果配置了Executor ,那么以Executor 属性值为准。

    本案例的配置如下:

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

                   redirectPort="8443"

                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"

    disableUploadTimeout="true"/>

    1.1.3           BIO/NIO/APR

    1.         BIO是最老的最稳定的(默认)的一个连接器。采用阻塞的方式工作。意味着每个连接线程绑定到每一个Http请求。知道Http返回为止。如果Http客户端的请求的是keep-alive连接,那么这些连接会一直保持着知道timeout(过期)。这期间他不会处理任何的请求。

    2.         NIO使用Java中的异步IO处理技术,不做阻塞。如果要想使用该方式则可以修改protocol属性值为org.apache.coyote.http11.Http11NioProtoco。

    3.         APR采用原生的c语言IO处理技术,但是需要安装apr和native,直接启动tomcat就支持apr。使用的时候需要设置protocol属性值为org.apache.coyote.http11.Http11AprProtocol。

    a)         安装apr

    其中apr的下载地址为:http://apr.apache.org/download.cgi

    本文使用的apr版本为apr-1.5.2.tar.gz。

    将其解压然后

    cd apr-1.5.2

    ./configure --prefix=/usr/local/devsoftware/apr

    make make install

    即可完成安装

    b)        安装apr-iconv

    cd apr-iconv-1.2.1

    ./configure  --prefix=/usr/local/devsoftware/apr-iconv --with-apr=/usr/local/devsoftware/apr

    make make install

    即可完成安装

    c)         安装apr-utils

    cd apr-util-1.5.4

    ./configure  --prefix=/usr/local/devsoftware/apr-util --with-apr=/usr/local/devsoftware/apr --with-apr-iconv=/usr/local/devsoftware/apr-iconv

    make make install

    即可完成安装

    d)        安装tomcat-native 首先进入tomcat的bin目录

    tar -zxvf  tomcat-native.tar.gz

    cd tomcat-native-1.2.10-src

    cd /usr/local/devsoftware/apache-tomcat-8.5.11/bin/tomcat-native-1.2.10-src/native

    ./configure --with-apr=/usr/local/devsoftware/apr

    make make install

     即可完成安装

    e)         设置apr环境变量

    进入tomcat的bin目录,打开catalina.sh。然后在#!/bin/sh中添加如下内容:

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/devsoftware/apr/lib。当然了为了保持tomcat的独立性,配置在期望使用的tomcat最好不过。

    再次启动tomcat,如果以上环节安装成功,输出的日志为:

    08-Feb-2017 05:38:55.303 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/local/devsoftware/apr/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

  • 相关阅读:
    WebService的学习
    什么是事物
    数组和链表的区别
    JDK6和JDK7中的substring()方法
    为什么存储密码字符数组比字符串更合适?
    java中Queue简介
    java中队列Queue的使用
    HashMap、Hashtable、TreeMap的区别
    笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
    笔试算法题(35):最长递增子序列 & 判定一个字符串是否可由另一个字符串旋转得到
  • 原文地址:https://www.cnblogs.com/zmc/p/7206626.html
Copyright © 2011-2022 走看看