• tomcat性能优化,内存优化和并发线程连接优化


    今天被一同事问到tomcat和内存优化的问题,而网上的资料基本都是来回copy,所以抽时间随便写点。文章中设置的参数都是一个随便写的,具体的还要根据自己的情况来定。

    1.内存优化:

    说到tomcat不得不提的是jvm,想让tomcat跑起来就必须有jvm,而jdk又是自带jvm,所以安装了jdk就可以让tomcat跑起来,而tomcat跑起来要想jvm申请内存空间。这里就是要讲的内存优化。而要想优化内存,就必须了解tomcat的启动过程。

    很多人都是从了解startup.bat(linux系统上使用start.sh)开始的。是的,我开始也是这样的。但是当你用编辑器打开脚本文件,看过源码之后你会发现,在这个文件里其实又调用了catalina.bat脚本文件。在这个文件里面有关于java相关的配置,比如:

     

    当然如果从被注释掉的部分也可以看出来。更重要的是,被注释掉的部分里面包含了关于申请java内存的相关信息。

    所以,tomcat内存优化,通过修改tomcat安装目录下bin文件夹下的catalina.bat(catalina.sh)文件来实现。

    具体实现方法:

    a.windows平台在catalina.bat文件的@echo off下追加

    set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m

    这就是简单的实现分配内存了。更详细的jvm内存参数方面的知识,我会再抽时间给大家讲讲。今天就不在此多说了。

    b.linux平台可直接在catalina.sh文件的开头追加

    JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m"

    当然,这些都不是必须的,每个人都有自己的做法。如果不在catalina文件加入内存信息的配置,也可以在每次启动的时候带上这些参数,当然这是一种很麻烦的方式,所以我选择了直接pass。

    2.线程优化和高并发

    线程优化是通过修改安装目录下conf文件夹下的server.xml文件来实现的。具体做法就是修改文件中

    <Connector .../>标签内的内容,通过修改里面的参数及配置来实现。

    简单的配置如下:

    <Connector executor="tomcatThreadPool"
                   port="80" protocol="HTTP/1.1" 
                   connectTimeout="60000"
                   keepAliveTimeout="15000"
                   maxKeepAliveRequests="1"
                   redirectPort="443"
                   maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="100" disableUploadTimeout="true"/>

    参数说明:

    connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
    keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒。
    maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间)
    maxHttpHeaderSize - http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
    URIEncoding - 指定Tomcat容器的URL编码格式。


    maxThreads - 最多同时处理的连接数,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可 创建的最大的线程数。
    acceptCount - 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认值可以自己查看源码。可以将此项当做一个等待队列。比如设置了1000,也就是说当线程数超过maxThreads之后的线程,都将放到此队列中。


    maxThreads 和acceptCount 这两个值如何起作用,请看下面三种情况

    情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。

    情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。

    情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused


    disableUploadTimeout - 上传时是否使用超时机制
    enableLookups - 是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
    bufferSize - 缓存大小
    maxSpareThreads - 最多空闲连接数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程 
    minSpareThreads - 最小空闲线程数,Tomcat初 始化时创建的线程数 
    minProcessors - 最小空闲连接线程数,用于提高系统处理性能,
    maxProcessors - 最大连接线程数,即:并发处理的最大请求数
    关于protocal方面的知识,网上写的还是比较详细的,大家可以自行搜索关于apr    bio   nio的相关文档,这里就不再做介绍。
    ---------------------
    作者:bebmwnz
    来源:CSDN
    原文:https://blog.csdn.net/bebmwnz/article/details/89968824
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Android学习——从文件中读取数据
    Android学习——将数据存储到文件
    开课第十周周总结
    Android学习——外部存储
    Android学习——文件内部存储
    Android学习——启动活动的最佳写法
    Android学习——随时随地退出程序
    Android学习——知晓当前是在哪一个活动
    《程序员修炼之道:从小工到专家》 阅读笔记02
    开课第九周周总结
  • 原文地址:https://www.cnblogs.com/pztc/p/10836083.html
Copyright © 2020-2023  润新知