本文将从 Tomcat性能优化,SpringCloud开启重试机制,Zuul网关性能参数优化,Ribbon性能参数优化,Feign与Hystrix性能优化等 五个方面分享在生产环境如何做好SpringCloud性能优化。
一般基于SpringCloud的微服务能够脱离传统的tomcat,独立跑起来,SpringBoot功不可没,其原理是SpringBoot内嵌了tomcat(当然可以换成其他servlet容器,如jetty),能够以java -jar形式就能跑起来。
所以针对每个springboot服务,我们需要对tomcat的一些参数进行优化,以下是楼主项目组优化的tomcat参数配置,供大家参考。
tomcat参数说明:
maxThreads,acceptCount参数应用场景
场景一
场景二
场景三
maxThreads调优
一般说服务器性能要从两个方面说起:
1、cpu计算型指标
2、io密集型指标
所以大部分情况下,tomcat处理io型请求比较多,比如常见的连数据库查询数据进行接口调用。
另外,要考虑tomcat的并发请求量大的情况下,对于服务器系统参数优化,如虚拟机内存设置和linux的open file限制。
maxThreads设置多大合适?
我们知道线程过多,会导致cpu在线程切换时消耗的时间随着线程数量的增加越来越大;线程太少,服务器的请求响应吞吐量会急剧下降,所以maxThreads的配置绝对不是越大越好。
实际情况是设置maxThreads大小没有最优解,要根据具体的服务器配置,实际的应用场景不断的调整和优化。
acceptCount设置多大合适?
尽量与maxThreads的大小保持一致 , 这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。
当使用URL进行路由时,则需要对zuul.host.connect-timeout-millis和zuul.host.socket-timeout-millis参数控制超时时间。
请求连接的超时时间
请求处理的超时时间
对所有操作请求都进行重试
对当前实例的重试次数,针对同一个服务实例,最大重试次数(不包括首次调用)
对下个实例的重试次数,针同其它的服务实例,最大重试次数(不包括首次server)
注意Hystrix断路器的超时时间需要大于ribbon的超时时间,不然不会触发重试
Feign和Ribbon在整合了Hystrix后,首次调用失败的问题?
目前楼主的强烈做法是: 禁用Hystrix的超时时间,设为false
还有一种是官方提倡的是 设置超时时间。
在实际的项目中亲测,这种方式也有不好的地方, 如请求时间超过5s会出现请求数据时有时无的情况 ,给用户的感觉是 系统不稳定,要求整改 。
另外,禁用hystrix,官方不推荐 。
hystrix超时设置原则
问题:一个http请求,如果feign和ribbon都配置了重试机制,异常情况下一共会请求多少次?
请求总次数 n 为feignClient和ribbon配置参数的笛卡尔积:
n(请求总次数) = feign(默认5次) * (MaxAutoRetries+1) * (MaxAutoRetriesNextServer+1)
其中+1是代表ribbon本身默认的请求。
其实二者的重试机制相互独立,并无联系。但是因为用了feign肯定会用到ribbon,所以feign的重试机制相对来说比较鸡肋,一般会关闭该功能。ribbon的重试机制默认配置为0,也就是默认是去除重试机制的,建议不要修改。
先阅读apache配置优化建议如下,再对相关参数进行调整,观察服务器状况.
Apache配置优化建议:
进入/usr/local/apache2/conf/extra目录下
Apache优化,
经过上述操作后,Apache已经能够正常运行。但是,对于访问量稍大的站点,Apache的这些默认配置是无法满足需求的,我们仍需调整Apache的一些参数,使Apache能够在大访问量环境下发挥出更好的性能。以下我们对Apache配置文件httpd.conf中对性能影响较大的参数进行一些说明。
(1)Timeout该参数指定Apache在接收请求或发送所请求内容之前的最长等待时间(秒),若超过该时间Apache则放弃处理该请求,并释放连接。该参数默认值为120,推荐设置为60,对于访问量较大的网站可以设置为30或15。
(2)KeepAlive该参数控制Apache是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型站点来说,通常设置为off以关闭该支持。
(3)MPM-prefork.c在默认情况下Apache使用Prefork(进程)工作模式,可以说这部分的参数设置是对Apache性能影响的核心和关键。用户可以在配置文档中找到以下配置段:
TcpTimedWaitDelay :确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源。如果运行的应用程序需要快速释放和创建新连接,而且由于 TIME_WAIT 中存在很多连接,导致低吞吐量,则调整此参数。
MaxUserPort :确定在应用程序从系统请求可用用户端口时,TCP/IP 可指定的最高端口号。 如何查看或设置: 使用 regedit 命令访问 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/ Services/TCPIP/Parameters 注册表子键并创建名为 MaxUserPort 的新 REG_DWORD 值。 停止并重新启动系统。 缺省值:无 建议值:至少十进制 32768。 注:现在 Windows NT 或 Windows 2000 操作系统上调整 WebSphere Application Server 时,同时使用这两个参数。
将以下代码,保存为reg文件,在服务器上双击导入注册表即可。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)