You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 8部署IIS10视频播放异常问题求助

生产环境ASP.NET Core 8 + Angular 16视频播放卡顿/界面冻结问题排查方案

问题现状

  • 部署架构:ASP.NET Core 8 Web API 后端 + Angular 16 前端
  • 异常表现:测试环境运行正常,生产环境首个视频加载数秒后卡顿;关闭视频后打开其他视频,前端界面完全冻结无法操作
  • 日志线索:
    • IIS站点日志无异常,请求返回状态码206(部分内容请求,符合视频流预期)
    • C:\Windows\System32\Logs下的HTTP日志记录Connection_Abandoned_Req_Queue错误
    • Windows事件日志显示:ISAPI向工作进程报告异常状态,进程ID 44828的工作进程触发应用池appname回收,异常时存在未结束的请求
  • 已尝试无效操作:安装.NET Framework 3.5、确认.NET Core 8.0.1版本一致性、增加应用池工作进程数、切换应用池集成/经典模式、启用32位应用、增大虚拟内存、安装系统更新、修正MP4/MPEG MIME类型、排查硬件故障、生成进程转储但无法分析

进一步排查与解决步骤

1. 排查Web API视频流处理的资源泄漏

  • 检查API中返回视频流的代码,确保所有流对象(如FileStream、MemoryStream)都通过using语句包裹,避免文件句柄或内存泄漏
  • 验证Range请求(对应206状态码)的处理逻辑,确认是否存在循环阻塞、未正确截断流的情况,导致请求长时间占用线程资源
  • 在appsettings.json中启用ASP.NET Core请求日志:
    "Logging": {
      "LogLevel": {
        "Microsoft.AspNetCore.HttpLogging": "Information"
      }
    }
    
    并在Program.cs中添加app.UseHttpLogging();,追踪视频请求的完整生命周期,定位请求卡顿的阶段

2. 调整IIS与应用池的关键配置

  • 修改应用池队列长度:打开IIS管理器→对应应用池→高级设置→队列长度,将默认值1000调至2000,缓解Connection_Abandoned_Req_Queue(请求队列溢出导致连接被丢弃)问题
  • 优化应用池回收策略:取消不必要的自动回收触发条件(如固定时间间隔回收),仅保留“内存占用超限”“异常时回收”;同时调整请求超时和闲置超时时间,避免正常请求被强制终止
  • 延长站点连接超时:进入站点→高级设置→连接超时,将默认120秒调整为300秒(根据视频长度灵活调整)

3. 优化前端视频加载逻辑

  • 检查Angular视频播放组件的销毁逻辑,关闭视频时必须调用videoElement.pause()并清空videoElement.src,避免旧请求持续占用浏览器连接池
  • 开启浏览器开发者工具的网络面板,查看切换视频时是否存在未完成的请求堆积,若有则优化请求取消逻辑(如使用RxJS的takeUntil操作符在组件销毁时取消未完成的请求)
  • 将<video>标签的preload属性设置为metadata,仅预加载视频元数据而非完整内容,减少带宽和服务器资源占用

4. 深入分析进程转储

  • 使用WinDbg工具(Windows SDK自带)加载进程转储文件,执行以下命令定位问题:
    • !dumpheap -stat:查看托管堆对象分布,排查是否存在大量未释放的流或请求对象
    • !threads:检查线程状态,找出处于WaitSleepJoin状态的阻塞线程
    • !clrstack:查看阻塞线程的调用栈,定位卡住的代码位置
    • 若为原生代码异常,执行!analyze -v分析异常细节,定位ISAPI相关错误

5. 验证ASP.NET Core模块配置

  • 检查web.config中的<aspNetCore>节点,开启stdoutLogEnabled="true",查看stdoutLogFile指定路径下的日志,排查是否有未捕获的后端异常
  • 尝试切换hostingModel:默认inprocess模式性能较高但与IIS耦合度高,可改为outofprocess模式测试,看是否能规避ISAPI相关异常

6. 隔离视频文件与传输方式

  • 替换生产环境的测试视频为小体积文件,验证是否因大文件导致资源耗尽
  • 将视频文件移至IIS静态文件目录,直接通过静态URL访问,若静态访问正常则说明问题出在Web API的流处理逻辑中

内容的提问来源于stack exchange,提问作者Can Yıldırmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:27:32