在Azure中,我们的内部业务服务很少托管在孤立的ASE上。
这些服务在具有2个实例的中型应用程序服务计划上运行。
这个环境已经投入生产和使用一个多月了,除了偶尔突然出现CPU峰值到100%,这会导致服务中断之外,性能一直相当不错。
我们没有弹性伸缩设置,但有2个实例一直在运行。
服务是aspnetcore
webapi,运行时是dotnet core2.0。
在过去的几周里,每当我遇到这个问题时,我都没有足够的幸运登录到kudu并获得一个进程转储来进一步调查。从字面上讲,我背后的业务是让服务尽可能快地启动和运行,最简单的方法是重新启动其中一个出现故障的服务或与预生产环境交换插槽。
我们的网络也限制了对ASE的访问,这使得我更难切换到WiFi,然后通过跳转框登录到kudu,我曾要求我们的运营工程师在报告此问题时给我转储,但他也没有听我的,主要是因为我不能自己做的原因。
我在Application Insights中看到的所有异常都是由于服务本身停机造成的,没有任何异常会首先导致问题(至少我还没有发现)
这导致我进行了一些猜测并寻找指标,唯一引起我怀疑的是垃圾收集。我也没有在GC图中看到任何突然的峰值,每次服务重新启动时,图都是一条相当直线(24小时),但每天都在增加,最终如下所示。
但工作内存是一个正弦图,让我认为没有内存泄漏。但是上图超过3天是正常的吗?
丢弃是在我重新启动服务时发生的。但所有服务都有类似的轨迹,即使是没有下降的轨迹。
我不确定这是单个服务的问题还是我忽略的环境配置的问题。
API端点是简单的CRUD操作,并在每个操作之后将事件发布到服务总线主题。有一个静态HttpClient
实例用于从另一个服务获取数据。除此之外,没有非托管资源,并且DB连接始终包装在using
语句中。
我知道我需要一个进程转储来进一步调查,但我最关心的是为什么应用程序网关(负载均衡器)不将流量发送到健康的实例。由于网关变得不健康,cloudflare使用该接口向客户端返回502
响应。MS支持无法提供帮助,也没有回答我们的负载均衡器是否正常工作。平均请求数约为每分钟50-60次。在这突如其来的激增中,CPU的运行速度不到10%。
谢谢
发布于 2018-08-14 06:07:41
可能是后端挂起了100%的CPU,无法响应Application Gateway运行状况探测。当发生这样的问题时,您是否能够使用后端健康日志验证后端的健康状态?如果两个后端实例都不健康,就可以解释502。如果其中一个是健康的并响应探测,那么发送到应用程序网关的新请求确实会流向健康的实例。如果您怀疑情况并非如此,请回复订阅id、网关名称和事件的大致时间窗口,以便我们查看。
https://stackoverflow.com/questions/51369238
复制相似问题