jvm tomcat调优实战经验记录
Tomcat 调优
一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。
QPS(TPS):每秒钟request/事务 数量
并发数: 系统同时处理的request/事务数
响应时间: 一般取平均响应时间
QPS(TPS) = 并发数 / 平均响应时间
例如:这里设置的jvm的maxThread是20
那对应的TPS = 20 / 0.2 = 100
在nacos中的tomcat线程设置调优
server.tomcat.max-threads = 50
server.tomcat.max-connections = 100
server.tomcat.accept-count = 100
jvm具体参数详解
acceptCount : 最大等待数
即当所有的请求处理线程都在使用时,所能接受的连接的队列的最大长度。当队列已满时,所有的连接请求都会被拒接,默认为100;
详细的说就是当调用HTTP请求数打到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat就会将该请求放入等待队列中,
这个acceptCount就是指能够接受的最大等待数,默认为100。如果等待队列满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)
maxThreads:最大线程数
每次一HTTP请求到达时,tomcat都会创建一个线程来处理该请求,所以最大线程数决定了服务器容器可以同时处理多少个请求。
maxThreads默认为200,建议增加,但是增加更多的线程就意味着带来更多的内存消耗,也带来了更多的线程上下文切换成本。
jvm中在默认情况下会在创建线程时分配1M的线程栈。
maxConnections:最大连接数
指在同一时间,tomcat能够接受的最大连接数,在java新的NIO模式中,默认值为10000,当连接数到达最大值maxConnections后,系统会继续接受连接,但不会超过acceptCount的值
maxConnections、maxThreads、acceptCount关系
用一个形象的比喻,通俗易懂的解释一下tomcat的最大线程数(maxThreads)、最大等待数(acceptCount)和最大连接数(maxConnections)三者之间的关系。我们可以把tomcat比做一个火锅店,流程是取号、入座、叫服务员,可以做一下三个形象的类比:
(1)acceptCount 最大等待数
可以类比为火锅店的排号处能够容纳排号的最大数量;排号的数量不是无限制的,火锅店的排号到了一定数据量之后,服务往往会说:已经客满。
(2)maxConnections 最大连接数
可以类比为火锅店的大堂的餐桌数量,也就是可以就餐的桌数。如果所有的桌子都已经坐满,则表示餐厅已满,已经达到了服务的数量上线,不能再有顾客进入餐厅了。
(3)maxThreads:最大线程数
可以类比为厨师的个数。每一个厨师,在同一时刻,只能给一张餐桌炒菜,就像极了JVM中的一条线程。