精华内容
下载资源
问答
  • tomcat最大连接数

    万次阅读 2018-04-17 19:16:43
    前提说明为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。动手去做一开始根据故障...

    前提说明

    为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。

    动手去做

    一开始根据故障todoList提供的参数MaxKeepAliveRequests,进行验证,我们将tomcat配置server.xml修改为:
    screenshot
    同时,启动客户端模拟30个长连接。

    预期应该只有10个连接能保持住。
    结果与预期不符,30个连接都连上了,而且正常。
    这由此怀疑提供的配置参数是否是真正限制最大连接数的含义了。
    screenshot
    KeepAlive是在HTTP1.1中定义的,用来保持客户机和服务器的长连接,通过减少建立TCP Session的次数来提高性能。常用的配置参数有{KeepAlive, KeepAliveTimeout, MaxKeepAliveRequests}。逐个说来:
    KeepAlive是决定开启KeepAlive支持;
    KeepAliveTimeout决定一 个KeepAlive的连接能保持多少时间,Timeout就尽快shutdown链接,若还有数据必须再建立新的连接 了;
    MaxKeepAliveRequests于KeepAliveTimeout相似,意思是服务多少个请求就shutdown连接。

    显然与我们想到的要求不符,再搜索其它配置参数:

    maxConnections
    根据字面意思觉得就应该是这个了。
    去验证吧,
    screenshot!
    最大连接数为10,我们启动30个长连接,
    预期应该是只有10个长连接,实际结果却是远超过10个。这个有点不应该啊。

    实验验证

    原来还有个参数可以觉得连接数的大小
    screenshot

    maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
    acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100

    这两个值如何起作用,请看下面三种情况
    情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。
    情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
    情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused

    同时加上maxConnections
    screenshot

    原来tomcat最大连接数取决于maxConnections这个值加上acceptCount这个值,在连接数达到了maxConenctions之后,tomcat仍会保持住连接,但是不处理,等待其它请求处理完毕之后才会处理这个请求。

    源码分析

    tomcat的最大连接数参数是maxConnections,这个值表示最多可以有多少个socket连接到tomcat上。BIO模式下默认最大连接数是它的最大线程数(缺省是200),NIO模式下默认是10000,APR模式则是8192(windows上则是低于或等于maxConnections的1024的倍数)。如果设置为-1则表示不限制。

    在tomcat里通过一个计数器来控制最大连接,比如在Endpoint的Acceptor里大致逻辑如下:

    while (running) {
        ...    
        //if we have reached max connections, wait
        countUpOrAwaitConnection(); //计数+1,达到最大值则等待
    
        ...
        // Accept the next incoming connection from the server socket
        socket = serverSock.accept();
    
        ...
        processSocket(socket);
    
        ...
        countDownConnection(); //计数-1
        closeSocket(socket);
    }
    

    计数器是通过LimitLatch锁来实现的,它内部主要通过一个java.util.concurrent.locks.AbstractQueuedSynchronizer的实现来控制。

    我们将最大连接数设置为10,同时启动超过30个长连接,
    然后通过jstack可以看到acceptor线程阻塞在countUpOrAwaitConnection方法上:

    http-nio-8080-Acceptor-0" daemon prio=10 tid=0x00007f9cfc191000 nid=0x1e07 waiting on condition [0x00007f9ca9fde000]
       java.lang.Thread.State: WAITING (parking)
            at sun.misc.Unsafe.park(Native Method)
            - parking to wait for  <0x000000076595b688> (a org.apache.tomcat.util.threads.LimitLatch$Sync)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
            at org.apache.tomcat.util.threads.LimitLatch.countUpOrAwait(LimitLatch.java:115)
            at org.apache.tomcat.util.net.AbstractEndpoint.countUpOrAwaitConnection(AbstractEndpoint.java:755)
            at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:787)
            at java.lang.Thread.run(Thread.java:662)
    

    代码层面也解释了这种现象。

    总结

    tomcat能支持最大连接数由maxConnections加上acceptCount来决定。同时maxThreads如何设定?

    以下部分结论引用自:http://duanfei.iteye.com/blog/1894387
    一般的服务器操作都包括两方面:1计算(主要消耗cpu),2等待(io、数据库等)

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

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

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

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

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

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

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

    软连接 
    Bat代码   收藏代码
    1. ln -s /home/ictfmcg/data/photo /var/jtnd/data/photo  
    tomcat 6的Connector配置如下 
    Xml代码   收藏代码
    1. <Connector port="8080" protocol="HTTP/1.1"  
    2.                connectionTimeout="20000"  
    3.                redirectPort="8443"  
    4.                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当前并发访问数:
    Bat代码   收藏代码
    1. netstat -an | grep ESTABLISHED | wc -l  
       对比httpd.conf中MaxClients的数字差距多少。 
    2、查看有多少个进程数: 
    Bat代码   收藏代码
    1. ps aux|grep httpd|wc -l  
    3、可以使用如下参数查看数据 
    Bat代码   收藏代码
    1. #ps -ef|grep httpd|wc -l  
     1388 
      统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。 
      表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整。 
    Bat代码   收藏代码
    1. #netstat -nat|grep -i "80"|wc -l  
      4341 
      netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。  www.2cto.com  
      最终返回的数字就是当前所有80端口的请求总数。 
    Bat代码   收藏代码
    1. #netstat -na|grep ESTABLISHED|wc -l  
      376 
      netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。 
      最终返回的数字就是当前所有80端口的已建立连接的总数。 
    Bat代码   收藏代码
    1. netstat -nat||grep ESTABLISHED|wc  
        - 可查看所有建立连接的详细记录 
      查看Apache的并发请求数及其TCP连接状态: 
      Linux命令: 
    Bat代码   收藏代码
    1. 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表示处理完毕,等待超时结束的请求数。
    展开全文
  • 为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。 动手去做 一开始根据故障todoList...

    转自:https://blog.csdn.net/quliuwuyiz/article/details/79979031

    前提说明
    为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。

    动手去做
    一开始根据故障todoList提供的参数MaxKeepAliveRequests,进行验证,我们将tomcat配置server.xml修改为:

    同时,启动客户端模拟30个长连接。

    预期应该只有10个连接能保持住。
    结果与预期不符,30个连接都连上了,而且正常。
    这由此怀疑提供的配置参数是否是真正限制最大连接数的含义了。

    KeepAlive是在HTTP1.1中定义的,用来保持客户机和服务器的长连接,通过减少建立TCP Session的次数来提高性能。常用的配置参数有{KeepAlive, KeepAliveTimeout, MaxKeepAliveRequests}。逐个说来:
    KeepAlive是决定开启KeepAlive支持;
    KeepAliveTimeout决定一 个KeepAlive的连接能保持多少时间,Timeout就尽快shutdown链接,若还有数据必须再建立新的连接 了;
    MaxKeepAliveRequests于KeepAliveTimeout相似,意思是服务多少个请求就shutdown连接。

    显然与我们想到的要求不符,再搜索其它配置参数:

    maxConnections
    根据字面意思觉得就应该是这个了。
    去验证吧,
    !
    最大连接数为10,我们启动30个长连接,
    预期应该是只有10个长连接,实际结果却是远超过10个。这个有点不应该啊。

    实验验证
    原来还有个参数可以觉得连接数的大小


    maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
    acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100

    这两个值如何起作用,请看下面三种情况
    情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。
    情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
    情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused

    同时加上maxConnections


    原来tomcat最大连接数取决于maxConnections这个值加上acceptCount这个值,在连接数达到了maxConenctions之后,tomcat仍会保持住连接,但是不处理,等待其它请求处理完毕之后才会处理这个请求。

    源码分析
    tomcat的最大连接数参数是maxConnections,这个值表示最多可以有多少个socket连接到tomcat上。BIO模式下默认最大连接数是它的最大线程数(缺省是200),NIO模式下默认是10000,APR模式则是8192(windows上则是低于或等于maxConnections的1024的倍数)。如果设置为-1则表示不限制。

    在tomcat里通过一个计数器来控制最大连接,比如在Endpoint的Acceptor里大致逻辑如下:

    while (running) {
        ...    
        //if we have reached max connections, wait
        countUpOrAwaitConnection(); //计数+1,达到最大值则等待
     
        ...
        // Accept the next incoming connection from the server socket
        socket = serverSock.accept();
     
        ...
        processSocket(socket);
     
        ...
        countDownConnection(); //计数-1
        closeSocket(socket);
    }
    计数器是通过LimitLatch锁来实现的,它内部主要通过一个java.util.concurrent.locks.AbstractQueuedSynchronizer的实现来控制。

    我们将最大连接数设置为10,同时启动超过30个长连接,
    然后通过jstack可以看到acceptor线程阻塞在countUpOrAwaitConnection方法上:

    http-nio-8080-Acceptor-0" daemon prio=10 tid=0x00007f9cfc191000 nid=0x1e07 waiting on condition [0x00007f9ca9fde000]
       java.lang.Thread.State: WAITING (parking)
            at sun.misc.Unsafe.park(Native Method)
            - parking to wait for  <0x000000076595b688> (a org.apache.tomcat.util.threads.LimitLatch$Sync)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
            at org.apache.tomcat.util.threads.LimitLatch.countUpOrAwait(LimitLatch.java:115)
            at org.apache.tomcat.util.net.AbstractEndpoint.countUpOrAwaitConnection(AbstractEndpoint.java:755)
            at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:787)
            at java.lang.Thread.run(Thread.java:662)
    代码层面也解释了这种现象。

    总结
    tomcat能支持最大连接数由maxConnections加上acceptCount来决定。同时maxThreads如何设定?

    以下部分结论引用自:http://duanfei.iteye.com/blog/1894387
    一般的服务器操作都包括两方面:1计算(主要消耗cpu),2等待(io、数据库等)

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

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

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

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

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

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

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

    Linux查看连接数,并发数
    软连接 
    Bat代码  
    ln -s /home/ictfmcg/data/photo /var/jtnd/data/photo  
    tomcat 6的Connector配置如下 
    Xml代码  
    <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当前并发访问数:
    Bat代码  
    netstat -an | grep ESTABLISHED | wc -l  
       对比httpd.conf中MaxClients的数字差距多少。 
    2、查看有多少个进程数: 
    Bat代码  
    ps aux|grep httpd|wc -l  
    3、可以使用如下参数查看数据 
    Bat代码  
    #ps -ef|grep httpd|wc -l  
     1388 
      统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。 
      表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整。 
    Bat代码  
    #netstat -nat|grep -i "80"|wc -l  
      4341 
      netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。  www.2cto.com  
      最终返回的数字就是当前所有80端口的请求总数。 
    Bat代码  
    #netstat -na|grep ESTABLISHED|wc -l  
      376 
      netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。 
      最终返回的数字就是当前所有80端口的已建立连接的总数。 
    Bat代码  
    netstat -nat||grep ESTABLISHED|wc  
        - 可查看所有建立连接的详细记录 
      查看Apache的并发请求数及其TCP连接状态: 
      Linux命令: 
    Bat代码  
    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表示处理完毕,等待超时结束的请求数。

    展开全文
  • Linux下tomcat设置最大连接数

    千次阅读 2016-07-25 18:14:49
    处理:修改tomcat的最大线程数。在server.xml里的connect标签里加参数,具体的参数名称请...加了maxThreads(默认200) 和 acceptCount(默认100)两个参数,分别设置最大连接数。 1、环境说明 Linux下tomca
    处理:修改tomcat的最大线程数。在server.xml里的connect标签里加参数,具体的参数名称请参考http://tomcat.apache.org/tomcat-6.0-doc/config/http.html , 
    加了maxThreads(默认200) 和 acceptCount(默认100)两个参数,分别设置最大连接数。


    1、环境说明


    Linux下tomcat运行期


     


    2、增加jvm 内存的配置


    #vi catalina.sh


    插入如下:


    JAVA_OPTS='-Xms256m -Xmx512m'


     


    3、INFO: Maximum number of threads (200) created for connector with address null and port 11222


    说明:最大线程数错误


    解决方案:


     


    使用线程池,用较少的线程处理较多的访问,可以提高tomcat处理请求的能力。使用方式:


    首先。打开/conf/server.xml,增加


    Xml代码
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"   
            maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />  
     


    最大线程500(一般服务器足以),最小空闲线程数20,线程最大空闲时间60秒。


    然后,修改<Connector ...>节点,增加executor属性,如:


    Xml代码
    <Connector executor="tomcatThreadPool"   
                   port="80" protocol="HTTP/1.1"   
                   connectionTimeout="60000"  
                   keepAliveTimeout="15000"  
                   maxKeepAliveRequests="1"  
                   redirectPort="443"  
                    ....../>  
     


     


    4、java.net.SocketException: Too many open files


     


    当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄。


    使用 #lsof -p 10001|wc -l   查看文件操作数


    如下操作:


    Js代码
    (1).ps -ef |grep tomcat   查看tomcat的进程ID,记录ID号,假设进程ID为10001   
    (2).lsof -p 10001|wc -l     查看当前进程id为10001的 文件操作数   
    (3).使用命令:ulimit -a    查看每个用户允许打开的最大文件数   
       默认是1024.   
    展开全文
  • tomcat是目前较为常用的Web容器,那么怎么配置tomcat才能使得自己的服务效率更高,今天我主要解释一下tomcat的最大线程数(maxThreads)、最大等待数(acceptCount)和最大连接数(maxConnections)。 **maxThreads...

    tomcat是目前较为常用的Web容器,那么怎么配置tomcat才能使得自己的服务效率更高,今天我主要解释一下tomcat的最大线程数(maxThreads)、最大等待数(acceptCount)和最大连接数(maxConnections)。

    **maxThreads(最大线程数):每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务可以同时处理多少个请求,默认200.**
    
    **accepCount(最大等待数):当调用Web服务的HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100.如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。**
    
    **maxConnections(最大连接数):这个参数是指在同一时间,tomcat能够接受的最大连接数。一般这个值要大于maxThreads+acceptCount。**
    

    如果:https://www.jianshu.com/p/35878d4ec130

    # 在配置文件中添加如下内容
    # tomcat最大线程数,默认为200
    server.tomcat.max-threads=200
    # tomcat最大连接数,默认为10000(网上的说法)
    server.tomcat.max-connections=300
    
    
    并发请求数 <= tomcat最大线程数200,可以看到200个请求,响应结果正常
    并发数(201) >tomcat最大线程数200.可以看到,因为tomcat最大的线程数为200,201的并发请求量,超出了并发处理的数量200,多出来的1个请求,需要等待某个处理中的请求处理完成
    请求数超过最大连接数300,可以看到有大量的没有正常响应的http请求,原因很简单,因为超过了tomcat设置的最大连接数,服务器拒绝了该次请求的连接
    
    

    在这里插入图片描述

    增加线程是有成本的,JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以更多的线程异味着更多的内存;
    更多的线程会带来更多的线程上下文切换成本。

    springboot中Tomcat配置建议:
    最大工作线程数 ,默认200(4核8G内存,线程数经验值为800,操作系统之间做线程之间切换调度是有开销的,不是越多越好),最大连接数默认是10000,等待长度默认为100,最小工作空闲线程默认10

    线程数的经验值为:1核2G内存, 线程数经验值为200,;4核8G内存,线程数经验值为800

    展开全文
  • 设置springboot自带tomcat最大连接数和最大并发数 从源代码来看,最大连接数和最大并发数默认是10000和200 可以通过工程下的application.yml配置文件来改变这个值 server: tomcat: uri-encoding: UTF-8 max-...
  • 点击打开链接
  • 程序猿关平 怎么可能150连接数,你说的是worker线程数吧 安东尼奥刘能 集群呀,软硬负载均衡 阿里巴巴员工 并发是按秒算的 你一个请求耗时是毫秒 懂了吧 种大头菜的仓鼠 改掉啊,谁让你用默认的,改成几万不就行了 ...
  • tomcat中websocket的最大连接数

    千次阅读 2019-09-16 11:53:24
    tomcat8.5+jdk1.8没有最大连接数的限制 一、在研究websocket遇到的坑 1.不同浏览器当中浏览器对于连接数是有自己的最大值的 IE-16个 谷歌-250个 火狐-200个 二、增加最大值的配置 1.windows下catalina.bat中增加...
  • Tomcat最大连接数问题

    万次阅读 2012-05-24 21:38:07
    Tomcat的server.xml中Context元素的以下参数应该怎么配合适 maxThreads="150" minSpareThreads="25" maxSpareThreads="75" acceptCount="100" />    答曰: maxThreads="150" 表示最多同时处理...
  • Tomcat最大连接数问题修改

    千次阅读 2015-10-05 18:20:42
    Tomcat的server.xml中Context元素的以下参数应该怎么配合适  maxThreads="150"  minSpareThreads="25"  maxSpareThreads="75"  acceptCount="100"  />    答曰: maxThreads="150" 表示最多...
  • Tomcat的配置最大并发连接数

    千次阅读 2016-07-28 09:57:56
    几乎所有的中文网页都介绍,要修改Tomcat的默认最大并发连接数,应该进行如下设置(实际上这些步骤是错误的): -------------------------------------------- 在tomcat配置文件server.xml中的配置中,和连接...
  • 1)maxThreads(最大线程) 每一次HTTP请求到达Web服务器,Web服务器都会创建一个线程来处理该... 当调用Web服务的HTTP请求达到tomcat最大线程时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队...
  • WebSocket现在很常用,想要测试tomcat最大连接数,今天试了一个可行的办法和配置(之前是用全公司的设备一起来测试的,真机环境的测试收到网络的影响很大,其实真实环境应用中,网络才是websocket的最大瓶颈) ...
  • SpringBoot内置Tomcat,再默认设置中,Tomcat的最大线程数是200,最大连接数是10000。支持的并发量是指连接数,200个线程如何处理10000条连接的? Tomcat有两种处理连接的模式,一种是BIO,一个线程只处理一个连接...
  • 一、解决方案:修改tomcat配置文件,修改最大连接数(增大) 修改server.xml配置文件,Connector节点中增加acceptCount和maxThreads这两个属性的值,并且使acceptCount大于等于maxThreads: <Connector port=...
  • 1. 添加tomcat管理员帐户 添加管理员账户tomcat-users.xml 2. TOMCAT内存 基本原理:JAVA程序启动时都会JVM 都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和最大内存在一定...
  • Tomcat参数调优:连接数和并发数连接数实战并发处理线程数 调整实战 配置项 含义 默认 建议 注意 备注 ConnectionTimeout 连接超时 20s 减少 与程序处理能力有关,处理能力越快设置短一点没关系 到底多久提示...
  • 前提说明为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。动手去做一开始根据故障...
  • tomcat连接数配置

    2019-09-20 08:33:07
    web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。Unix中如何设置这些参数,请参阅Unix常用监控和管理命令 tomcat4中的配置示例: port="8080" ...
  • tomcat调优之监控连接数和连接池

    千次阅读 2019-01-04 18:23:40
    在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 Tomcat配置文件server.xml中:Connector的主要功能,是接收连接请求,创建Request和...
  • tomcat默认支持最大线程是200,当线程达到200后,将新的线程加入等待队列,等待队列默认100,当等待队列达到100后,直接拒绝此次请求返回connectionrefused。 连接超时时间默认为20秒。 来着tomcat官方文档...
  • tomcat配置最大连接数

    2009-02-27 13:20:16
     maxSpareThreads="75" 表示如果最多可以空75个线程,例如某时刻有80人访问,之后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的。    acceptCount="100" 当同时连接的人数达到maxThreads时,还...
  • 但是,前端并发最多只能支持260websocket连接就上不去了,以下是我的前端测试代码和tomcat的配置。请大家帮我看看是我写错了么,还是说单个tomcat的瓶颈就是如此? 前端代码 ``` ; charset=UTF-8" ...
  • 1.基本上在server.xml的Connector(连接器)配置...2.如果配置Executor(线程池方式),则瓶颈就在浏览器支持最大ws连接数了,即便都用默认参数。chrome一个标签页大约255,firefox大约200。 如果创建的ws连接太多 ...
  • %> 类似于静态页面,以此来判断tomcat支持最大的并发用户数量 使用loadrunner设置1000并发用户进行压力测试。每两秒钟增加一个用户,以此递增,直至1000后,然后再按照两秒钟一个用户递减直至用户位0. 测试...
  • 查看tomcat 并发连接数

    千次阅读 2019-02-15 13:39:13
    查看tomcat并发连接数有两个方式: 方式1:通过tomcat自带的管理控制台查看: 启动tomcat后,在浏览器输入:http://127.0.0.1:8080/manager/status tomcat7以后需要账号登录,配置账号需要进入tomcat目录下的conf...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,480
精华内容 16,192
关键字:

tomcat支持的最大连接数