zoukankan      html  css  js  c++  java
  • tomcat最大连接数

    tomcat能支持最大连接数由maxConnections加上acceptCount来决定。

    那么maxThreads如何设定?

    一般的服务器操作都包括两方面:1计算(主要消耗cpu),2等待(io、数据库等)

    第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。

    第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样 才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内 存设置和linux的open file限制。

    现实应用中,我们的操作都会包含以上两种类型(计算、等待),所以maxThreads的配置并没有一个最优值,一定要根据具体情况来配置。

    最好的做法是:在不断测试的基础上,不断调整、优化,才能得到最合理的配置。

    acceptCount的配置,我一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。

    如果设的较小,可以保证接受的请求较快相应,但是超出的请求可能就直接被拒绝

    如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的。

    tomcat 6的Connector配置如下

    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    maxThreads="800" acceptCount="1000"/>
    其中最后两个参数意义如下:
    maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
    acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
    这两个值如何起作用,请看下面三种情况
    情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。
    情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
    情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused
    maxThreads如何配置
    一般的服务器操作都包括量方面:1计算(主要消耗cpu),2等待(io、数据库等)
    第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。
    第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内存设置和linux的open file限制。
    我在测试时遇到一个问题,maxThreads我设置的比较大比如3000,当服务的线程数大到一定程度时,一般是2000出头,单次请求的响应时间就会急剧的增加,
    百思不得其解这是为什么,四处寻求答案无果,最后我总结的原因可能是cpu在线程切换时消耗的时间随着线程数量的增加越来越大,
    cpu把大多数时间都用来在这2000多个线程直接切换上了,当然cpu就没有时间来处理我们的程序了。
    以前一直简单的认为多线程=高效率。。其实多线程本身并不能提高cpu效率,线程过多反而会降低cpu效率。
    当cpu核心数<线程数时,cpu就需要在多个线程直接来回切换,以保证每个线程都会获得cpu时间,即通常我们说的并发执行。
    所以maxThreads的配置绝对不是越大越好。
    现实应用中,我们的操作都会包含以上两种类型(计算、等待),所以maxThreads的配置并没有一个最优值,一定要根据具体情况来配置。
    最好的做法是:在不断测试的基础上,不断调整、优化,才能得到最合理的配置。
    acceptCount的配置,我一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。
    如果设的较小,可以保证接受的请求较快相应,但是超出的请求可能就直接被拒绝
    如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的。
    1、查看apache当前并发访问数:

    netstat -an | grep ESTABLISHED | wc -l
    对比httpd.conf中MaxClients的数字差距多少。
    2、查看有多少个进程数:

    ps aux|grep httpd|wc -l
    3、可以使用如下参数查看数据

    #ps -ef|grep httpd|wc -l
     1388
      统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。
      表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整。

    #netstat -nat|grep -i "80"|wc -l
      4341
      netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。 www.2cto.com
      最终返回的数字就是当前所有80端口的请求总数。

    #netstat -na|grep ESTABLISHED|wc -l
      376
      netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。
      最终返回的数字就是当前所有80端口的已建立连接的总数。

    netstat -nat||grep ESTABLISHED|wc
    - 可查看所有建立连接的详细记录
      查看Apache的并发请求数及其TCP连接状态:
      Linux命令:

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
      返回结果示例:
      LAST_ACK 5
      SYN_RECV 30
      ESTABLISHED 1597
      FIN_WAIT1 51
      FIN_WAIT2 504
      TIME_WAIT 1057
      其中的
      SYN_RECV表示正在等待处理的请求数;
      ESTABLISHED表示正常数据传输状态;
      TIME_WAIT表示处理完毕,等待超时结束的请求数。

  • 相关阅读:
    topcoder srm 320 div1
    topcoder srm 325 div1
    topcoder srm 330 div1
    topcoder srm 335 div1
    topcoder srm 340 div1
    topcoder srm 300 div1
    topcoder srm 305 div1
    topcoder srm 310 div1
    topcoder srm 315 div1
    如何统计iOS产品不同渠道的下载量?
  • 原文地址:https://www.cnblogs.com/yanghj010/p/14954264.html
Copyright © 2011-2022 走看看