贵州省交通工程建设质监局网站,网站空间怎么查询,做养生网站怎么赚钱,网站建设怎设计Tomcat阻塞模式
阻塞模式#xff08;BIO#xff09; 客户端和服务器创建一个连接#xff0c;它就会创建一个线程来处理这个连接#xff0c;以为这客户端创建了几个连接#xff0c;服务端就需要创建几个线程来处理你#xff0c;导致线程会产生很多#xff0c;有很多线程…Tomcat阻塞模式
阻塞模式BIO 客户端和服务器创建一个连接它就会创建一个线程来处理这个连接以为这客户端创建了几个连接服务端就需要创建几个线程来处理你导致线程会产生很多有很多线程也处于休眠状态 非阻塞模式NIO 阻塞模式 Acceptor建立一个连接并接收客户端发过来的请求当Acceptor接收这个连接带给Worker来处理 如果Worker没处理完Acceptor也只能等待直到任务完成。 非阻塞模式中间加了个Poller多了个容器Acceptor建立一个连接并接收客户端发过来的请求之后并没有给Worker而是放在Poller容器里给了之后Acceptor不会等待继续完成其他任务如果Worker太忙了会开启多个线程去处理有可能1个Acceptor对应多个Worker
Tomcat Server Status
在conf/tomcat-users.xml里配置账号方可访问
maxThreads 修改最大连接数
maxThreadstomcat接收客户端请求的最大线程数也就是同时处理任务的个数它的默认大小为200一般来说在高并发的I/O密集型应用中这个值设置为1000左右比较合理前提是机器配置高 Connector port8080 protocolHTTP/1.1connectionTimeout20000redirectPort8443 maxThreads20 /tomcat最高线程数设置了20jmeter压力配置的线程数200如下图20个线程几乎都是绿色运行中状态说明线程很忙需要增加tomcat最高线程数如果线程数配置过高上下切换也是很消耗资源的所以需要合理配置tomcat最高线程数。
maxConnections
这个参数是指同一时间tomcat能够接受的最大连接数对于java新的NIO模式maxConnections默认值是10000所以这个参数我们一般保持不变。 例如jmeter开启2000线程压服务器服务器端开启200哥线程处理客户端的请求假设开启的连接数是2000maxconnections200代表另外1800直接拒绝都不需要等待一般设置会比较大有可能响应时间比较慢但不会被拒绝。
acceptCount
当线程数量达到上面设置的值所能接受的最大排队数量超过这个值请求就会被拒绝一般和maxThreads设置成一样大。 server.xml Connector port8080 protocolHTTP/1.1connectionTimeout20000redirectPort8443 maxThreads20 acceptCount30 /当acceptCount30意思是超过30个排队的线程就直接拒掉 maxThreads设置20jmeter线程200如下图 怎么判断最大线程池够不够用maxThreads 场景一、jmeter压测线程设置1maxThreads设置20 线程监控结果 jvisualvm的thread监控图是每秒刷新一次其中橙色代表TIMED_WAITING状态没活儿干绿色代表RUNNABLE状态在干活 通过这个测试结果你可以看到在只有一个压力线程的情况下这10个Worker是轮流提供响应的典型的线程足够用的状态。 场景二、当压力线程数通过递增慢慢超过服务端线程数时。 在这个场景中特意把压力工具中的线程数设置得高于Tomcat线程数并且通过递增的方式加压。 一开始线程数时足够用的还有挺多的时间处于空闲状态但随着压力的增加Tomcat的线程越来越忙直到不够用于是Tomcat就自己调增了线程数知道maxThreads的值然后线程的空闲状态越来越小到最后几乎没有空闲状态。 可以看到响应时间随着线程数的不够用而不断的增加。 这是典型的线程配置不够的状态。
常见瓶颈
压力不断增大服务器资源利用率一直保持很低压力上不去响应时间变长吞吐量趋于稳定并且有下降趋势。 排查首先排查中间件tomcat线程使用情况