参数调优
配置项 | 默认 | 建议 | 注意 |
---|---|---|---|
ConnectionTimeout | 20s | 减少 | |
maxThreads 处理连接的最大线程数 |
200 | 增加 | 不是越大越好 |
accept@ount(backlog) 等待接受accept的请求数量限制 |
100 | 增加 | socket参数,min(accept, /prox/sys/net/core/somaxconn |
maxConnections 最大连接处理数 |
nio 1w apr 8192 |
不变 |
- 不能靠经验猜测,需要通过不断调试,找出适合应用程序的合理配置
调优
1. 连接数 调整
-
总共连接数 = acceptCount+ connections
connections: Tomcat能接收的请求限制;
acceptCount: 超过Tomcat能接收的请求数以后,堆积在操作系统的数量(windows 和 linux 略有不同);
1.1 什么时候需要调整connections?如何调整?
connections 小于 maxThread的时候;需要调大;最好是比预期的最高并发数要大20%;反 正是堆积到tomcat的work处理线程池中(堆积占内存);
1.2 什么时候需要调整acceptCount?
想受理更多用户请求,却又不想堆积在tomcat中,利用操作系统来高效的堆积,可以调整为 最高并发数 connections; (如果不改操作系统的配置 /prox/sys/net/core/somaxcnn,则可能不会生效)
实际上不需要调整,tomcat默认100,linux默认128;最好是把连接控制交给应用程序,这 样方便管理。
启动方式: java -jar web-demo-1.1.0.jar --server.tomcat.max-connections=1 --server.tomcat.max-thread=1 --server.tomcat.acceptCount=1
2、 并发处理线程数 调整
线程太少,CPU利用率过低,程序的吞吐量变小,资源浪费,容易堆积。 线程太多,上下文频繁切换,性能反而变低。
2.1 线程数调为多少合适?
场景代入:服务器配置2核,不考虑内存问题。收到请求,java代码执行耗时50ms,等待数 据返回50ms
理想的线程数量= (1 + 代码阻塞时间/代码执行时间) * cpu数量
实际情况是跑起代码,压测环境进行调试。不断调整线程数,将CPU打到80~90%的利用 率。
java -jar web-demo-1.1.0.jar --server.tomcat.max-threads=500
3、 总结
请求多,CPU占用率高了,如果能接受很慢的响应,就加大。 否则就集群分流
本质来说,优化代码才是王道,配置只能锦上添花而已!
附:整体架构图
整体架构如有需要:每台机器可以是nginx+tomcat,Nginx负责限流+日志记录
如果觉得有收获就点个赞吧,更多知识,请点击关注查看我的主页信息哦~
网友评论