exedeveloper阿里云

服务器各种资源使用率正常,但站点接口请求很慢

2018-02-27  本文已影响218人  ivan_cloud

问题现象:

服务器无报警,但.NET站点、Java站点接口的请求时快时慢

排查&分析:

1、查看站点CPU使用率在10~20%,计算密集但还算正常(4核的ECS配置单个进程CPU使用率需控制在25%以下)

2、查看Java站点的trace_log,发现发生慢的请求是调用.NET的服务接口占用时间很长,确定是.NET站点的问题

3、对.NET站点集群中的每一台单独模拟请求,发现有几台ECS站点请求快,有几台ECS站点请求慢

4、陆续重启所有站点后,那几台ECS站点过一会儿之后依旧请求慢

5、查询API请求日志,发现今天有较多租户提交考试

6、考试为计算密集型的接口,有可能是因为有较多的请求队列积压,导致单台服务器的吞吐率变慢。目前应用程序池的队列长度都是设置为5000

7、研究IIS服务器配置优化,了解站点的最大并发连接数、应用程序池的队列长度等工作机制原理

链接:深入理解IIS的多线程工作机制

最大并发连接数 = 队列长度 + IIS最大并发工作线程数

最大并发连接数系统默认配置是无限大

最大并发工作线程数是未知的、不可配置的,按照之前压测的经验,单台ECS能并发同时处理的请求数(tps)一般只有小几百。

推断:以目前的配置,会导致服务器请求队列积压较多,新的请求响应需要等待较长时间

方案:

1、优化IIS服务器配置:

a) 调整队列长度回默认值1000;

b) 调整最大并发连接数为1500 = 1000 + 500tps,超过的请求将直接返回503(此处返回503的情况与队列长度达到上限时的503现象的不同点在于:应用程序池不会被停止,只是拒绝新的请求);

c) 调整应用程序池的最大工作进程数为2,提高多核CPU的利用率。后续观察各台不同配置的ECS的CPU使用率再做调整。

2、通用SLB负载均衡配置,在考试服务还未从.NET服务中独立出来前(考试Java独立服务重构将在V2.20.0上线),临时将考试接口与其它接口的请求服务器分开,实现临时的考试独立服务

后续方案:

3、研究解决混合云租户的白名单限制方案,以方便服务临时水平伸缩

4、研究阿里云动态伸缩方案,实现考试、直播等并发不均衡服务的服务器动态伸缩

5、继续推进目前.NET单块应用的Java独立服务重构,避免单块应用一起死的现象

4、继续深入研究微服务框架,实现更多的服务治理功能(服务监控、链路监控、限流、升降级等)。初步考虑是Java启用另外的微服务框架(应该是使用阿里云的企业级分布式应用服务产品 EDAS),不受异构语言的限制

上一篇 下一篇

猜你喜欢

热点阅读