Angular应用无限请求https://dc.services.visualstudio.com/v2/track导致崩溃是什么原因
Angular应用无限上报Application Insights请求问题解决方案
你遇到的无限请求问题中的https://dc.services.visualstudio.com/v2/track是微软Application Insights(应用性能监控服务)的默认数据上报接口,你观察到的无请求体POST、返回为空的现象,通常是上报逻辑异常循环、请求未完成组装就被发送或被拦截导致的,具体原因和对应解决方案如下:
1. 采集规则配置错误引发循环上报
这是最常见的触发原因:
- 你开启了Application Insights的全量网络请求采集配置,但没有把SDK自身的上报域名加入排除列表,会形成「上报监控数据→这个上报请求本身又被监控采集到→触发新的上报」的无限循环。
- 修复方法:在Application Insights的初始化配置中添加过滤规则,排除自身上报接口的采集,参考配置代码:
// Angular项目的Application Insights初始化配置 import { ApplicationInsights } from '@microsoft/applicationinsights-web'; private appInsights = new ApplicationInsights({ config: { instrumentationKey: '你的应用接入密钥', // 方式1:直接配置排除域名 correlationHeaderExcludedDomains: ['dc.services.visualstudio.com'], // 方式2:自定义过滤逻辑,灵活控制不上报的请求 disableTelemetry: (telemetryItem) => { return telemetryItem.name === 'Microsoft.ApplicationInsights.RemoteDependency' && telemetryItem.data?.target?.includes('dc.services.visualstudio.com'); } } }); appInsights.loadAppInsights();
2. 上报失败触发无限重试
- 当前网络环境、权限配置导致上报请求持续失败(比如跨域限制、接入密钥错误、公司防火墙拦截该域名),同时你没有限制SDK的最大重试次数,积压的待上报数据会不断触发重试,最终占满浏览器资源导致崩溃。
- 修复方法:先验证上报域名是否可以正常访问、接入密钥是否正确,再调整SDK的重试配置,限制最大重试次数:
config: { // 其他配置保持不变 maxRetryAttempts: 3, // 最多重试3次 disableRetry: false // 不需要完全关闭重试的话不用修改这个参数 }
3. Angular变更检测和埋点逻辑形成循环
- 如果你在
ngDoCheck、ngAfterViewChecked这类高频执行的生命周期钩子中写了自定义埋点上报逻辑,或者埋点执行时触发了Angular的变更检测,会形成「变更检测→执行埋点上报→触发新的变更检测」的无限循环,不断生成新的上报请求。 - 修复方法:排查所有自定义埋点的触发位置,不要在高频生命周期钩子中添加上报逻辑,必要时使用
NgZone.runOutsideAngular执行埋点逻辑,避免触发变更检测:
import { NgZone } from '@angular/core'; constructor(private ngZone: NgZone) {} // 上报时跳出Angular变更检测区域 trackEvent(eventName: string) { this.ngZone.runOutsideAngular(() => { this.appInsights.trackEvent({ name: eventName }); }); }
内容的提问来源于stack exchange,提问作者manymanymore
相关产品推荐
相关产品推荐

