精华内容
下载资源
问答
  • Tomcat连接数

    2013-08-26 20:08:17
    4、连接数 5、最小空闲连接线程数 6、最大连接线程数 关系:1:1(连接线程)  有连接的线程叫连接线程,无连接的线程叫空闲线程。 Tomcat 连接参数设置 1、线程数 2、最小空闲线程数 3、最大空闲线程数 4、连接...

    Tomcat 连接参数设置

    1、线程数

    2、最小空闲线程数

    3、最大空闲线程数

    4、连接数

    5、最小空闲连接线程数

    6、最大连接线程数

    关系:1:1(连接<-—>线程)

          有连接的线程叫连接线程,无连接的线程叫空闲线程。



    展开全文
  • Tomcat连接数设置

    千次阅读 2019-08-12 20:22:45
    Tomcat连接数设置 在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10maxProcessors:最大连接线程数,...

    Tomcat连接数设置

    在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:
    minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
    maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
    acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
    enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
    connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

    其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。

    web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。Unix中如何设置这些参数,请参阅Unix常用监控和管理命令

    转载于:https://www.cnblogs.com/xzp0222/p/6307109.html

    展开全文
  • Tomcat连接数与线程池

    2019-06-09 13:39:00
    Tomcat连接数与线程池 一:前言  在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。  Tomcat配置文件server.xml中:Connector的主要功能...

                  Tomcat连接数与线程池

    一:前言

      在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。

      Tomcat配置文件server.xml中:Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Request和Response对象传给Engine。当Engine处理完请求后,也会通过Connector将响应返回给客户端。

      可以说,Servlet容器处理请求,是需要Connector进行调度和控制的,Connector是Tomcat处理请求的主干,因此Connector的配置和使用对Tomcat的性能有着重要的影响。这篇文章将从Connector入手,讨论一些与Connector有关的重要问题,包括NIO/BIO模式、线程池、连接数等。

      根据协议的不同,Connector可以分为HTTP Connector、AJP Connector等,本文只讨论HTTP Connector。

     
     

    二:Nio、Bio、APR

     1.Connector的protocol

       Connector在处理HTTP请求时,会使用不同的protocol。不同的Tomcat版本支持的protocol不同,其中最典型的protocol包括BIO、NIO和APR(Tomcat7中支持这3种,Tomcat8增加了对NIO2的支持,而到了Tomcat8.5和Tomcat9.0,则去掉了对BIO的支持)。

      BIO是Blocking IO,顾名思义是阻塞的IO;NIO是Non-blocking IO,则是非阻塞的IO。而APR是Apache Portable Runtime,是Apache可移植运行库,利用本地库可以实现高可扩展性、高性能;Apr是在Tomcat上运行高并发应用的首选模式,但是需要安装apr、apr-utils、tomcat-native等包。

     

     2.如何指定protocol

      Connector使用哪种protocol,可以通过元素中的protocol属性进行指定,也可以使用默认值。

      指定的protocol取值及对应的协议如下:

      HTTP/1.1:默认值,使用的协议与Tomcat版本有关

        org.apache.coyote链接

        org.apache.coyote链接

        org.apache.coyote链接

        org.apache.coyote链接

      如果没有指定protocol,则使用默认值HTTP/1.1,其含义如下:在Tomcat7中,自动选取使用BIO或APR(如果找到APR需要的本地库,则使用APR,否则使用BIO);在Tomcat8中,自动选取使用NIO或APR(如果找到APR需要的本地库,则使用APR,否则使用NIO)。

     

    3.BIO/NIO有何不同

      无论是BIO,还是NIO,Connector处理请求的大致流程是一样的:

      在accept队列中接收连接(当客户端向服务器发送请求时,如果客户端与OS完成三次握手建立了连接,则OS将该连接放入accept队列);在连接中获取请求的数据,生成request;调用servlet容器处理请求;返回response。为了便于后面的说明,首先明确一下连接与请求的关系:连接是TCP层面的(传输层),对应socket;请求是HTTP层面(应用层),必须依赖于TCP的连接实现;一个TCP连接中可能传输多个HTTP请求。

      在BIO实现的Connector中,处理请求的主要实体是JIoEndpoint对象。JIoEndpoint维护了Acceptor和Worker:Acceptor接收socket,然后从Worker线程池中找出空闲的线程处理socket,如果worker线程池没有空闲线程,则Acceptor将阻塞。其中Worker是Tomcat自带的线程池,如果通过配置了其他线程池,原理与Worker类似。

      NIO实现的Connector中,处理请求的主要实体是NIoEndpoint对象。NIoEndpoint中除了包含Acceptor和Worker外,还是用了Poller,处理流程如下图所示(图片来源链接

      Acceptor接收socket后,不是直接使用Worker中的线程处理请求,而是先将请求发送给了Poller,而Poller是实现NIO的关键。Acceptor向Poller发送请求通过队列实现,使用了典型的生产者-消费者模式。在Poller中,维护了一个Selector对象;当Poller从队列中取出socket后,注册到该Selector中;然后通过遍历Selector,找出其中可读的socket,并使用Worker中的线程处理相应请求。与BIO类似,Worker也可以被自定义的线程池代替。

      通过上述过程可以看出,在NIoEndpoint处理请求的过程中,无论是Acceptor接收socket,还是线程处理请求,使用的仍然是阻塞方式;但在“读取socket并交给Worker中的线程”的这个过程中,使用非阻塞的NIO实现,这是NIO模式与BIO模式的最主要区别(其他区别对性能影响较小,暂时略去不提)。而这个区别,在并发量较大的情形下可以带来Tomcat效率的显著提升:

      目前大多数HTTP请求使用的是长连接(HTTP/1.1默认keep-alive为true),而长连接意味着,一个TCP的socket在当前请求结束后,如果没有新的请求到来,socket不会立马释放,而是等timeout后再释放。如果使用BIO,“读取socket并交给Worker中的线程”这个过程是阻塞的,也就意味着在socket等待下一个请求或等待释放的过程中,处理这个socket的工作线程会一直被占用,无法释放;因此Tomcat可以同时处理的socket数目不能超过最大线程数,性能受到了极大限制。而使用NIO,“读取socket并交给Worker中的线程”这个过程是非阻塞的,当socket在等待下一个请求或等待释放时,并不会占用工作线程,因此Tomcat可以同时处理的socket数目远大于最大线程数,并发性能大大提高。

     

    三:acceptCount、maxConnections、maxThreads

      再回顾一下Tomcat处理请求的过程:在accept队列中接收连接(当客户端向服务器发送请求时,如果客户端与OS完成三次握手建立了连接,则OS将该连接放入accept队列);在连接中获取请求的数据,生成request;调用servlet容器处理请求;返回response。

      相对应的,Connector中的几个参数功能如下:

    1.acceptCount

      accept队列的长度;当accept队列中连接的个数达到acceptCount时,队列满,进来的请求一律被拒绝。默认值是100。

    2.maxConnections

      Tomcat在任意时刻接收和处理的最大连接数。当Tomcat接收的连接数达到maxConnections时,Acceptor线程不会读取accept队列中的连接;这时accept队列中的线程会一直阻塞着,直到Tomcat接收的连接数小于maxConnections。如果设置为-1,则连接数不受限制。

      默认值与连接器使用的协议有关:NIO的默认值是10000,APR/native的默认值是8192,而BIO的默认值为maxThreads(如果配置了Executor,则默认值是Executor的maxThreads)。

      在windows下,APR/native的maxConnections值会自动调整为设置值以下最大的1024的整数倍;如设置为2000,则最大值实际是1024。

    3.maxThreads

      请求处理线程的最大数量。默认值是200(Tomcat7和8都是的)。如果该Connector绑定了Executor,这个值会被忽略,因为该Connector将使用绑定的Executor,而不是内置的线程池来执行任务。

      maxThreads规定的是最大的线程数目,并不是实际running的CPU数量;实际上,maxThreads的大小比CPU核心数量要大得多。这是因为,处理请求的线程真正用于计算的时间可能很少,大多数时间可能在阻塞,如等待数据库返回数据、等待硬盘读写数据等。因此,在某一时刻,只有少数的线程真正的在使用物理CPU,大多数线程都在等待;因此线程数远大于物理核心数才是合理的。

      换句话说,Tomcat通过使用比CPU核心数量多得多的线程数,可以使CPU忙碌起来,大大提高CPU的利用率。

    4.参数设置

      (1)maxThreads的设置既与应用的特点有关,也与服务器的CPU核心数量有关。通过前面介绍可以知道,maxThreads数量应该远大于CPU核心数量;而且CPU核心数越大,maxThreads应该越大;应用中CPU越不密集(IO越密集),maxThreads应该越大,以便能够充分利用CPU。当然,maxThreads的值并不是越大越好,如果maxThreads过大,那么CPU会花费大量的时间用于线程的切换,整体效率会降低。

      (2)maxConnections的设置与Tomcat的运行模式有关。如果tomcat使用的是BIO,那么maxConnections的值应该与maxThreads一致;如果tomcat使用的是NIO,那么类似于Tomcat的默认值,maxConnections值应该远大于maxThreads。

      (3)通过前面的介绍可以知道,虽然tomcat同时可以处理的连接数目是maxConnections,但服务器中可以同时接收的连接数为maxConnections+acceptCount 。acceptCount的设置,与应用在连接过高情况下希望做出什么反应有关系。如果设置过大,后面进入的请求等待时间会很长;如果设置过小,后面进入的请求立马返回connection refused。

     

    四:线程池Executor

      Executor元素代表Tomcat中的线程池,可以由其他组件共享使用;要使用该线程池,组件需要通过executor属性指定该线程池。

      Executor是Service元素的内嵌元素。一般来说,使用线程池的是Connector组件;为了使Connector能使用线程池,Executor元素应该放在Connector前面。Executor与Connector的配置举例如下:

    Executor的主要属性包括

      name:该线程池的标记

      maxThreads:线程池中最大活跃线程数,默认值200(Tomcat7和8都是)

      minSpareThreads:线程池中保持的最小线程数,最小值是25

      maxIdleTime:线程空闲的最大时间,当空闲超过该值时关闭线程(除非线程数小于minSpareThreads),单位是ms,默认值60000(1分钟)

      daemon:是否后台线程,默认值true

      threadPriority:线程优先级,默认值5

      namePrefix:线程名字的前缀,线程池中线程名字为:namePrefix+线程编号

    五:查询当前状态

      上面介绍了Tomcat连接数、线程数的概念以及如何设置,下面说明如何查看服务器中的连接数和线程数。

      查看服务器的状态,大致分为两种方案:(1)使用现成的工具,(2)直接使用Linux的命令查看。

      现成的工具,如JDK自带的jconsole工具可以方便的查看线程信息(此外还可以查看CPU、内存、类、JVM基本信息等),Tomcat自带的manager,收费工具New Relic等。下图是jconsole查看线程信息的界面:

      下面说一下如何通过Linux命令行,查看服务器中的连接数和线程数。

    1.连接数

    假设Tomcat接链接

      netstat –nat | grep 8083

    结果如下所示:

      可以看出,有一个连接处于listen状态,监听请求;除此之外,还有4个已经建立的连接(ESTABLISHED)和2个等待关闭的连接(CLOSE_WAIT)。

    2.线程

      ps命令可以查看进程状态,如执行如下命令:

     

    ps –e | grep java

     

      结果如下图:

      可以看到,只打印了一个进程的信息;27989是线程id,java是指执行的java命令。这是因为启动一个tomcat,内部所有的工作都在这一个进程里完成,包括主线程、垃圾回收线程、Acceptor线程、请求处理线程等等。

    通过如下命令,可以看到该进程内有多少个线程;其中,nlwp含义是number of light-weight process。

     

    ps –o nlwp 27989

     

      可以看到,该进程内部有73个线程;但是73并没有排除处于idle状态的线程。要想获得真正在running的线程数量,可以通过以下语句完成:

     

    ps -eLo pid ,stat | grep 27989 | grep running | wc -l

     

      其中ps -eLo pid ,stat可以找出所有线程,并打印其所在的进程号和线程当前的状态;两个grep命令分别筛选进程号和线程状态;wc统计个数。其中,ps -eLo pid ,stat | grep 27989输出的结果如下:

      图中只截图了部分结果;Sl表示大多数线程都处于空闲状态。

     

    ----摘抄自网易新闻,仅供作为参考学习使用

    转载于:https://www.cnblogs.com/To-The-Age/p/10993112.html

    展开全文
  • tomcat连接数设置

    2016-06-22 09:56:00
    如何加大tomcat连接数 在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10maxProcessors:最大连接线程...

    如何加大tomcat连接数

    在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:
    minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
    maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
    acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
    enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
    connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

    其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。


    web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。Unix中如何设置这些参数,请参阅Unix常用监控和管理命令

    tomcat4中的配置示例:
    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
    port="8080" minProcessors="10" maxProcessors="1024"
    enableLookups="false" redirectPort="8443"
    acceptCount="1024" debug="0" connectionTimeout="30000" />

    对于其他端口的侦听配置,以此类推。

    2. tomcat中如何禁止列目录下的文件
    在{tomcat_home}/conf/web.xml中,把listings参数设置成false即可,如下:
    <servlet>
    ...
    <init-param>
    <param-name>listings</param-name>
    <param-value>false</param-value>
    </init-param>
    ...
    </servlet>

    3. 如何加大tomcat可以使用的内存

    tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。

    Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下设置:
    JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
    需要把这个两个参数值调大。例如:
    JAVA_OPTS='-Xms256m -Xmx512m'
    表示初始化内存为256MB,可以使用的最大内存为512MB

    可以增加系统变量
    JAVA_OPTS=-Xms64m -Xmx512m

     

    我查过一些资料跟5#说的查不多,Tomcat承受不了2000的并发。这个我跟公司的人不止一次的说过,公司的人将maxProcessors和acceptCount 这两个参数改的比较大,然后不加集合点来跑2000的并非性能的,我估计Action.c(19): Error -27492: "HttpSendRequest" failed, Windows error code=12002 and retry limit (0) exceeded for URL="http://192.168.1.162:38889/adserver/user/registeruser"
    这个错误也是由于“web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。”这个原因造成的。
    不知道我想的对不对。

    转载于:https://www.cnblogs.com/bethal/p/5606065.html

    展开全文
  • 转载自 干货 | Tomcat 连接数与线程池详解 前言 在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章 详解Tomcat配置文件...
  • 查看tomcat连接数

    千次阅读 2019-09-11 15:45:50
    查看mysql线程状态 show status like 'threads_running';...查看tomcat并发连接数有两个方式: 方式1:通过tomcat自带的管理控制台查看: 启动tomcat后,在浏览器输入:http://11.8.130.129:8080/...
  • Tomcat 连接数与线程池详解

    千次阅读 2020-04-30 10:09:22
    在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接...
  • tomcat连接数配置

    千次阅读 2018-11-22 09:13:21
    Tomcat connector元素常用配置(最大连接数等) 在tomcat的server.xml中有类似:   &lt;Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort=&...
  • tomcat连接数线程数

    千次阅读 2016-12-05 16:53:35
    tomcat最大线程的设置 Tomcat的server.xml中连接器设置如下   Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  enableLookups="false" redir
  • 如何加大tomcat连接数

    2010-08-30 15:38:00
    如何加大tomcat连接数 在tomcat配置文件server.xml中的 配置中,和连接数相关的参数有: minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors:最大连接线程数,即:...
  • 增加Tomcat连接数

    万次阅读 2017-05-18 16:23:41
    tomcat配置文件server.xml中,找到 port="8080" ... 修改相关参数 ...minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10  ...acceptCount:允许的最大连接数,应大于等于ma
  • 在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章详解Tomcat配置文件server.xml中写到过:Connector的主要功能,是接收连接...
  • windows 查看tomcat连接数

    千次阅读 2020-04-05 11:09:46
    windows系统下查看tomcat某个端口的连接数 请查看: http://yayihouse.com/yayishuwu/chapter/2519
  • 前言在用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正了解这些概念,必需先理解Tomcat的连接器(Connector)。在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接...
  • 作者:编程迷思www.cnblogs.com/kismetv/p/7806063.html前言在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。在前面的文章 详解Tomcat配置文件...
  • 服务器调优,修改tomcat连接数

    千次阅读 2014-11-19 11:19:36
    服务器调优,修改tomcat连接数  首先。打开/conf/server.xml,增加 Xml代码  maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />    最大线程500(一般服务器足以),最小空闲线程数...
  • public class TomcatConfig { @Value("${server.port}") public int port; @Bean public ConfigurableServletWebServerFactory configurableServletWebServerFactory(){ TomcatServletWebServerFactory ...
  • Tomcat连接数设置参数

    2017-05-24 10:49:04
    tomcat配置文件server.xml中的配置中,和连接数相关的参数有: minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75 ...
  • 在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接...
  • tomcat连接数、线程数关系

    千次阅读 2017-07-26 15:59:11
    个人对tomcat连接器3个属性maxConnections、maxThreads、acceptCount的理解: 先摘取官网对这3个属性的描述:acceptCount The maximum queue length for incoming connection requests when all possible request ...
  • 作者:编程迷思www.cnblogs.com/kismetv/p/7806063.html前言在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。在前面的文章 详解Tomcat配置文件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,330
精华内容 932
关键字:

tomcat连接数