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
相关产品推荐
相关产品推荐

