对于Tomcat的参数调优主要有下面4个主要的方向
配置项 | 默认 | 建议 | 注意 |
Connection Timeout | 20s | 减少 | |
MaxThreads处理连接的最大线程数 | 200 | 增加 | 不是越大越好 |
acceptCount(backlog)等待接收accept的请求数量限制 | 100 | 增加 | socket参数min(accept,/proc/sys/net/core/somaxconn) |
maxConnections最大连接处理数 | nio 1w apr 8192 | 不变 |
1、 测试环境准备 jmeter地址: .cgi
下载地址://jmeter/binaries/apachejmeter5.0.zip
教程:.html
测试脚本:WebDemo测试用例.jmx
2、 连接数 调整 总共连接数 = acceptCount+ connections
connections: Tomcat能接收的请求限制;
acceptCount: 超过Tomcat能接收的请求数以后,堆积在操作系统的数量(windows 和 linux 略有不同);
用户请求首先进入accept队列中,Tomcat开始接受连接,当接受的连接达到最大值以后,也就是这些请求正在处理,当Tomcat接受的请求数量化已经达到最大值,就会向操作系统层面堆积进入acceptCount,在windows下当acceptCount和Connections都已经达到最大值,windows就会不让再进行连接,linux环境下则不同因为linux环境中有一个握手的队列,所以会在SYN queue中堆积一些数据,但是基本上不会进行对操作系统层面上进行调整,主要是对connections调整。
2.1 什么时候需要调整connections?如何调整?
connections小于maxThread的时候;需要调大;最好是比预期的最高并发数要大20%;反 正是堆积到tomcat的work处理线程池中(堆积占内存);
2.2 什么时候需要调整acceptCount?
想受理更多用户请求,却又不想堆积在tomcat中,利用操作系统来高效的堆积,可以调整为 最高并发数 connections; 实际上不需要调整,tomcat默认100,linux默认128;最好是把连接控制交给应用程序,这 样方便管理。
启动方式: java jar webdemo1.1.0.jar at.maxconnections=1 at.maxthread=1 at.acceptCount=1
3、 并发处理线程数 调整 线程太少,CPU利用率过低,程序的吞吐量变小,资源浪费,容易堆积。 线程太多,上下文频繁切换,性能反而变低。
3.1 线程数调为多少合适?
场景代入:服务器配置2核,不考虑内存问题。收到请求,java代码执行耗时50ms,等待数 据返回50ms
理想的线程数量= (1 + 代码阻塞时间/代码执行时间) * cpu数量
实际情况是跑起代码,压测环境进行调试。不断调整线程数,将CPU打到80~90%的利用 率。 java jar webdemo1.1.0.jar at.maxthreads=500
上面的公式的意思很简单,就是为了将CPU的使用效率达到最高,一个CPU的情况下,一个线程执行50ms后需要睡眠100ms,在这个线程睡眠的时候,可以让别的线程来执行,可以让两个线程执行完,两个线程执行完成后,睡眠的线程苏醒,继续执行,所以需要3个线程就可以让这个CPU一直处于工作状态。
4、 总结 请求多,CPU占用率高了,如果能接受很慢的响应,就加大。 否则就集群分流 认清现实,优化代码才是王道,配置只能是锦上添花!
下面是Tomcat的架构层
本文发布于:2024-01-31 15:14:25,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170668526829437.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |