参数调优
tomcat有4个调优参数,分为3个方向
配置项 | 默认 | 建议 | 注意 |
---|---|---|---|
ConnectionTimeout | 20s | 减少 | |
maxThreads处理连接的最大线程数 | 200 | 增加 | 不是越大越好 |
acceptCount(backlog)等待接收accept的请求数量限制 | 100 | 增加 | socket参数,min(accept,/proc/sys/net/core/somaxconn(留个坑,这里跟NIO相关,需要回去复习) |
maxConnections最大连接处理数 | nio 1w apr 8192 | 不变 |
参数调优不能靠经验猜测,需要通过不断调试,找到适合应用程序的合理配置
ConnectionTimeout是根据业务指标具体来定,因此下面不具体讲
总共连接数 = acceptCount+ connections
connections: Tomcat能接收的请求限制;
acceptCount: 超过Tomcat能接收的请求数以后,堆积在操作系统的数量(windows 和 linux
略有不同);
linux与windows 不同,还有三次握手的SYN queue
调整策略
2.1 什么时候需要调整connections?如何调整?
connections小于maxThread的时候;需要调大;最好是比预期的最高并发数要大20%;反
正是堆积到tomcat的work处理线程池中(堆积占内存);
2.2 什么时候需要调整acceptCount?
想受理更多用户请求,却又不想堆积在tomcat中,利用操作系统来高效的堆积,可以调整为
最高并发数 connections;
实际上不需要调整,tomcat默认100,linux默认128;最好是把连接控制交给应用程序,这
样方便管理。
很少调整这个参数,更多的是调整connections
启动方式: java jar webdemo1.1.0.jar server.tomcat.maxconnections=1
server.tomcat.maxthread=1 server.tomcat.acceptCount=1
3、 并发处理线程数 调整
线程太少,CPU利用率过低,程序的吞吐量变小,资源浪费,容易堆积。
线程太多,上下文频繁切换,性能反而变低。
3.1 线程数调为多少合适?
场景代入:服务器配置2核,不考虑内存问题。收到请求,java代码执行耗时50ms,等待数
据返回50ms
理想的线程数量= (1 + 代码阻塞时间/代码执行时间) * cpu数量
实际情况是跑起代码,压测环境进行调试。不断调整线程数,将CPU打到80~90%的利用
率。
java jar webdemo1.1.0.jar server.tomcat.maxthreads=500
调优实战
待续