You need to enable JavaScript to run this app. C# Blazor Server部署后大量_blazor请求与内存占用过高问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

C# Blazor Server部署后大量_blazor请求与内存占用过高问题咨询

问题诊断与解决方案

高内存占用与多进程问题

原因

  • 部署配置错误触发了.NET 5默认多工作进程启动逻辑:默认会匹配服务器CPU核心数启动对应数量的Kestrel工作进程,你观测到的20个.dll进程就是多实例进程,22GB是多个进程预分配虚拟内存的叠加值,属于空载下的异常状态。
  • 发布时未使用Release版本:Debug版本携带完整调试符号、关闭了代码剪裁与优化,启动时预加载的组件体积是Release版本的3~10倍,会大幅拉高内存占用。

修复方案

  • 发布时选择Release模式,按需勾选「剪裁未使用代码」「单文件发布」选项,减少运行时加载的组件体积。
  • 限制Kestrel工作进程数:在项目Program.cs中添加配置webBuilder.UseSetting(WebHostDefaults.ProcessCountKey, "1");,强制仅启动单工作进程。
  • 修正Apache反向代理配置,不要配置多实例负载均衡规则,仅对接单个Kestrel进程端口即可。

大量_blazor?id=请求失败问题

原因

这是Blazor Server的SignalR长连接握手请求,本地无反向代理所以运行正常,部署后出现问题是Apache配置缺失导致:

  • Apache默认未开启WebSocket代理支持,_blazor路径的WebSocket握手请求被截断,浏览器会不断重试发起连接,就产生大量带随机ID的失败请求。
  • 若应用部署在域名二级路径下,未配置Blazor路径基准(PathBase)也会导致请求路径错误。

修复方案

  • 执行命令启用Apache必要模块:a2enmod proxy proxy_http proxy_wstunnel rewrite
  • 更新Apache站点配置,添加_blazor路径的WebSocket转发规则,示例配置如下:
# 替换5000为你的Kestrel实际监听端口
ProxyPass /_blazor ws://127.0.0.1:5000/_blazor
ProxyPassReverse /_blazor ws://127.0.0.1:5000/_blazor
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
ProxyPreserveHost On
  • 若应用部署在二级路径,在Program.cs的app.UseRouting()前添加配置:app.UsePathBase("/你的二级路径前缀");

内容的提问来源于stack exchange,提问作者Michał Poterek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 18:15:06