工具:apache JMeter
参数调优配置项:
ConnectionTimeout: 默认20s , ↓
maxThreads处理最大的线程数:默认200 ↑
acceptCount等待接受accept的请求数量限制:默认100 ↑
maxConnections Tomcat最大处理连接数: nio:1w 不变
一、连接数调整
总共连接数=acceptCount+connections
connections:Tomcat能接受的请求限制
acceptCount:超过connections以后,堆积在操作系统中的数量(Windows直接拒绝请求,而Linux则吧对应的请求堆放到队列吗)
二、什么时候需要调整connections?如何调整?
connections小于maxThread时候,需要调大,最好是比预期的最高并发数大20%(并发1000,connections则1200),反正是堆积到tomcat的work处理线程池中(堆积占内存:
什么时候需要调整acceptCount?
想受理更多用户请求,却又不想堆积在tomca中,利用操作系统来高效的堆积,可以调整为
量高井发数- connections;
实际上不需要调整,tomcat默认100,linux默认128; 最好是把连接控制交给应用程序。这样方便管理。
启动方式: java jar web-demo.jar --server.tomcat.max-connections=1
--server .tormcat .max-thread=1
-- server.tomcat .acceptCount=1
三、并发处理线程数调整
线程太少,CPU利用本过低,程序的吞吐量变小,资源浪费,容易堆积。
线程太多,上下文频繁切换,性能反而变低,
线程数调为多少合适?
场景化入:服务器配置2核,不考虑内存问题。收到请求[ jeva代码执行耗时50ms等待数据返回50ms
理想的线程数量= (1 +代码阻塞时间 / 代码执行时间)*Cpu数量
实际情况是跑起代码,压测环境进行调试。不断调整线程数,将CPU打到80-90%的利用
java -jar web-demo.jar --server. tomcat .max-threads=500
请求多,CPU占用率高了,如果能接受很慢的响应就加大,否则就集群分流