zoukankan      html  css  js  c++  java
  • tomcat线程优化

    tomcat线程优化

    ===================================
    tomcat线程池
    在tomcat服务中每一个用户请求都是一个线程,所以可以使用线程池来提高性能。
    1、线程池是什么?
    线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后创建线程后自动启动这些任务,线程池线程都是后台线程。每个线程都使用默认的堆栈大小。
    它由线程池管理器,工作线程,任务接口,任务队列组成。
    2、在什么情况下使用线程池?。
    单个任务处理的时间短。将需处理的任务的数量大。
    3、有什么好处?
    【1】减少在创建和销毁线程所花的时间以及系统资源的开锁
    【2】城小在用线程范、有可能址成系统创建大量线程而导数消耗宏系统内存以及“过度切换”。
    ===================================
    参数说明
    maxThreads(最大线程数):默认值是200(可适当调整)如果配置了一个。Executor,则该属性的任何值集将被正确记录,但是它将被显示为-1。
    minSpareThreads(最小活跃线程数):默认是25(调整活跃线程数的时候必须开启下面的参数)。
    prestartminSpareThreads(是否在启动时就生成minSpareThreads个线程):默认是flase,改为true则开启
    MaxQueueSize(最大的等待队列数,超过则请求拒绝):基本是无 上限,假如你超过最大线程数,就可以给你设置100的等待队列数。
    ====================================
    配置过程如下:
    [root@localhost ~]# vim /usr/local/tomcat8/conf/tomcat-users.xml
     44 <role rolename="manager-gui"/>
     45 <role rolrname="admin-gui"/>
     46 <user username="tomcat" password="tomcat" roles="m    anager-gui,admin-gui"/>
    保存退出
    [root@localhost ~]# vim /usr/local/tomcat8/webapps/manager/META-INF/context.xml   #注释以下内容
     19 <!--  <Valve className="org.apache.catalina.valves    .RemoteAddrValve" allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" />--> 
    保存退出
    再重启服务
    [root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
    [root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
    [root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
     69     <Connector port="8080" protocol="HTTP/1.1"
     70                connectionTimeout="20000"
     71                redirectPort="8443"
     72                 maxThreads="500" 
    73                 minSpareThreads="100" 
    74                 prestartminSpareThreads="ture"
     75 />
    保存退出
    [root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
    [root@localhost ~]# /usr/local/tomcat8/bin/startup.sh

    ===========================================
    tomcat连接器
    Connector是Tomcat接收请求的入口,每个Connector有说自己专属的监听端口。
    Connector有两种:HTTP Connector和AIP Connectors
    -------------通用属性----------------
    属性
    allowTracee :一个布尔值,可用于启用或禁用TRACE HTTP方法。如果未指定,则此属性设置为false。
    async Timeoute:异步请求的默认超时(以毫秒为单位)。如果未指定,则此属性设置为10000 (10 秒)。
    enableLookups:设置为true,如果你想调用request.getRemoteHost(),以便返回远程客户的实际主机名执行DNS查找。
                设置为false跳过DNS查找并以字符串形式返回IP地址(从而提高性能)。默认情况下,DNS 查找被禁用。
    maxHeaderCounte:容器允许的请求中的最大标头数。将拒绝包含多于指定限制的标头的请求。值小于0表示没有限制。如果未指定,则使用默认值100。
    maxParameterCounte:容器将自动解析的参数和值对的最大数量(GET 加POST)。超出此限制的参数和值对将被忽略。值小于0表示没有限制。
                                         如果未指定,则使用默认值10000。请注意,FailedRequestFilter 过滤器可用于拒绝达到限制的请求
    URIEncoding:解决乱码问题的  
    ccceptCount:当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。队列已满时收到的任何请求都将被拒绝。默认值为100。
    acceptorThreadCounte:用于接受连接的线程数。在多CPU机器上增加此值,尽管您真的不需要超过2。此外,对于大量非保持连接的连接,您可能还希望增加此值。默认值是1。
    compression:是否进行压缩
    一个完整的模式
    [root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
     69     <Connector port="8080" protocol="HTTP/1.1"
     70                connectionTimeout="20000"
     71                redirectPort="8443"
     72                 maxThreads="500"
     73                 minSpareThreads="100"
     74                 prestartminSpareThreads="ture"
     75                 enableLookups="false"
     76                 maxPostSize="10485760"
     77                 URIEncoding="UTF-8"
     78                 acceptCount="100"
     79                 acceptorThreadCount="2"
     80                 disableUploadTimeout="True"
     81                 maxConnections="10000"
     82                 SSLEnabled="False"
     83 />
    保存退出
    [root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
    [root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
    ===========================================
    禁用Tomcat AJP 连接器
    [root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
    129    <!--
    130         <Connector port="8009" protocol="AJP/1.3"     redirectPort="8443" />-->
    保存退出
    [root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
    [root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
    ============================================
    tomcat 热部署与热加载
    面试题:什么是热部署,什么是热加载
    项目开发过程中,经常要改动tomcat的jsp文件,但是又不想重新启动服务,因为服务器重新启动服务需要花费很长时间,
    但又想直接获得deuge结果,有两种方式:热部署和热加载。
    热加载:在server.xml > context属性中设置reladable= "true"
    <Context docBase="/web/crushlinux" path="" reloadable="true" />.
    #Context 用来指定网页存放位置
    热部署:在server.xml -> context属性中设置 autoDeploy="true"
    <Context docBase="/web/crushlinux" path="" autoDeploy="true" />
    两者区别:
    热加载:服务器会监听class文件改变,包括web-inf/class,web-inf/lib,web-inf/web.xml等文件,若发生更改,则局部进行加载,不清空session,不释放内存。开发中用的多,但是要考虑内存溢出的情况。
    热部署: 整个项目重新部署,包括你重新打上.war文件。会清空session,释放内存。项目打包的时候用的多。
    ============================================
    tomcat JVM 参数优化
    适当调整tomcat的运行jvm参数可以提升整体性能
    JVM内存模型
    1. Java栈
    Java栈与每一个线程关联的,jvm 在创建每个线程的时候,会分配一定的栈空间给线程使用,它主要用来存储线程执行过程中的局部变量和方法的返回值,以及方法调用上下文,栈空间随着线程的终止而释放
    2. Java堆
    Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种java对象,比如数组,线程对象等
    3、Java堆的分区。
    新生代 、老年代 、永久代
    4、Virtual区:最大内存和初始内存的差值,就是vrtual区,新生代,老年代,永久代上都有虚拟区(virtual)。
    5、设置区的大小
    Jvm提供了相应的参数来对内存大小进行配置,jvm 中堆被分为了3个大的区间,同时jvm也提供了些选项对 young, oldgenerati on的大小进行控制。
    6、Total heap.
    Xms:指定了jvm初始启动以后初始化内存
    -Xmx: 指定jvm堆的最大内存,在jvm启动以后,会分配-Xmx参数指定大小的内存给JVM,但是不一定全都使用,jvm会根据-Xms参数来调节真正用于jvm的内存。
    Xmx-Xms=virtual大小(之差就是三个virtual空间大小)。
    ----------------------------------------------------------------------------
    参数说明:。
    1. file. encoding默认文件编码。
    {
     2. - Xmx1024m设置JVM最大可用内存为102 4MB.
     3.  -Xms1024m  设置JVM最小内存为1024 MB,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存
     4. - XX:NewSize设置 新生代
     5.  XX: MaxNewSize  设置最大的新生代大小
     6.-XX:PermSize  设置永久代大小
     7. - XX :MaxPermSize设置最大永久代大小
    }重要
    8. - XX:NewRatio=4:设置新生代(包括Eden和两个Survivor区)与终身代的比值(除去永
    久代)。设置为4,则新生代与终身代所占比值为1: 4,新生代占整个堆栈的1/50
    9.- XXx:MaxTenuringThreshold=0:设置垃圾最大年龄, 默认为15,如果设置为0的话,则新生代对象不经过Survivor区,直接进去老年代,
    对于老年代比较多的应用,可以提高效率。如果将此值设置为-一个较大值,则新生代对象会在Survivor区进行多次复制,这样可以增加对象再新生代的存活时间,增加再新生代即被回收的概论。
    10. - XX:+DisableExplicitGC这个将 会忽略手动调用GC的代码使得System. gc()的调用就会变成一一个空调用,完全不会出发任何GC。
    ====================================================
    在tomcat中设置JVM参数
    Tomcat性能取决于内存大小
    上策:  优化代码,该项需要开发经验足够丰富,对开发人员要求较高。
    中策: jvm 优化机制垃圾回收机制把不需要的内存回收。优化jvm--优化垃圾回收策略
    下策:加足够大的内存,该项的资金投入比较大
    下下策:每天0点定时重启tomcat ,使用较为广泛
    优化catalina.sh配置文件。在catalina.sh配置文件中添加以下代码:# tomcat分配1G内存模板。
    上传meminfo.war 能够在网页中查看信息http://192.168.200.67:8080/meminfo/meminfo.jsp
    [root@localhost ~]# vim /usr/local/tomcat8/bin/catalina.sh
      2 JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"
    保存退出
    ### -Xms1024m -Xmx1024m   最小内存,最大内存
    ####-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m" 
    ###########分别为设置新生代   设置永久代大小    设置最大永久代大小
     

  • 相关阅读:
    Django REST framework
    django写入csv并发送邮件
    GC收集器ParNew&CMS
    编写高质量的JavaScript代码
    Vue3.0 declare it using the "emits" option警告
    vue 3.0 router 跳转动画
    vue3.0 element-plus 表格合并行
    element-plus 时间日期选择器 el-date-picker value-format 无效等
    vue3.0中使用,一个元素中是否包含某一个元素。
    vue axios ajax 获取后端流文件下载
  • 原文地址:https://www.cnblogs.com/elin989898/p/11927629.html
Copyright © 2011-2022 走看看