系统重启时http请求量为什么会涨?
系统重启时开始QPS为0,启动后瞬间QPS达到平时2-3倍,什么情况?
1、是不是监控系统显示错了?
登陆到服务器上,查看日志,原始日志也是同样情况。
2、是不是metric log记录的问题?
在进入调用方法后记录http的metric日志(qps),调用结束后记录耗时日志(latency)。
问题就在这里:系统刚启动时,系统计算资源并没有完全准备好(如Tomcat线程池),请求会在队列中排队,并没有进入到方法调用,此时统计的QPS为0;当更多线程池可以处理请求后, 队列中的请求被分配到不同线程进行处理,直到队列被消费完,这段时间显示的QPS会高于正常情况。
请求进入调用之前都要经过哪些环节?看下图
解决办法:
当前的metric中统计的QPS并不能在真实反映系统的负载(排队的请求为包括在内),通过上层Nginx的日志统计请求量更加准确。 Nginx日志监控也只能获取到请求结束后的日志。
换个思路:如何解决启动是队列堆积的问题?
运维角度:Nginx权重调节,负载探测
开发角度:系统启动后直接启动相关的线程池
spring-boot 在1.3.3 的tomcat容器 支持最大线程数设施,默认为0;
spring-boot 在2.0 后支持更多的线程池选项:
server.tomcat.accept-count=0 # Maximum queue length for incoming connection requests when all possible request processing threads are in use. server.tomcat.background-processor-delay=30s # Delay between the invocation of backgroundProcess methods. If a duration suffix is not specified, seconds will be used. server.tomcat.max-connections=0 # Maximum number of connections that the server accepts and processes at any given time. server.tomcat.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message header. server.tomcat.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post content. server.tomcat.max-threads=0 # Maximum number of worker threads. server.tomcat.min-spare-threads=0 # Minimum number of worker threads.