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

Blazor Server在Linux环境下内存占用过高且无法释放的问题求助

Linux环境下Blazor Server应用内存占用过高且无法释放问题

我在Linux环境运行的.NET Blazor Server应用出现极高内存占用,且内存始终无法释放。用户运行报表时确实需要1-2GB内存,但关闭标签页后资源应被释放,.NET也该相应释放部分内存,目前应用内存占用接近90-95%。

问题

  1. 因其他进程几乎无内存压力,无法判断服务器处于内存峰值状态,还是.NET在持留内存。
  2. .NET内存转储文件过大,不符合预期:下载大小约5-6GB,但分析后发现已用对象仅约30-300MB。

内存诊断信息

root@a9f25bad2d02:~/site/wwwroot# dotnet-counters monitor

[System.Runtime]
    % Time in GC since last GC (%)                                         0    
    Allocation Rate (B / 10 sec)                                     209,648    
    CPU Usage (%)                                                          0    
    Exception Count (Count / 10 sec)                                       0    
    GC Committed Bytes (MB)                                              105    
    GC Fragmentation (%)                                                  43.752
    GC Heap Size (MB)                                                     68    
    Gen 0 GC Count (Count / 10 sec)                                        0    
    Gen 0 Size (B)                                                19,577,728    
    Gen 1 GC Count (Count / 10 sec)                                        0    
    Gen 1 Size (B)                                                 1,608,856    
    Gen 2 GC Count (Count / 10 sec)                                        0    
    Gen 2 Size (B)                                                49,073,776    
    IL Bytes Jitted (B)                                            4,471,180    
    LOH Size (B)                                                  26,161,384    
    Monitor Lock Contention Count (Count / 10 sec)                         0    
    Number of Active Timers                                               15    
    Number of Assemblies Loaded                                        5,110    
    Number of Methods Jitted                                          64,067    
    POH (Pinned Object Heap) Size (B)                                706,440    
    ThreadPool Completed Work Item Count (Count / 10 sec)                 17    
    ThreadPool Queue Length                                                0    
    ThreadPool Thread Count                                                4    
    Time spent in JIT (ms / 10 sec)                                        0 
    Working Set (MB)                                                   5,773 
    
    
root@a9f25bad2d02:~/site/wwwroot# free -m
              total        used        free      shared  buff/cache   available
Mem:           7817        6858         121          19         837         740
Swap:          4095        2156        1939

root@a9f25bad2d02:~/site/wwwroot# top
Tasks:  11 total,   2 running,   8 sleeping,   1 stopped,   0 zombie
%Cpu(s):  1.5 us,  0.7 sy, 50.4 ni, 45.3 id,  2.2 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7817.4 total,     89.3 free,   7262.5 used,    465.6 buff/cache
MiB Swap:   4096.0 total,   1676.2 free,   2419.8 used.    341.3 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                      
                                                                                                                                                   
   74 root      30  10 9812340   5.4g  19812 t   0.0  70.7  21:22.97 dotnet                                                                                                                                        
 1908 root      30  10   13948    708    540 S   0.0   0.0   0:00.18 sshd                                                                                                                                         
 1910 root      30  10    5752   2040   1808 S   0.0   0.0   0:00.03 bash                                                                                                                                         
 2526 root      30  10    9780   3448   2972 R   0.0   0.0   0:00.00 top

从dotnet-counters monitor结果可见,工作集约为5.7GB,但所有代、大对象堆(LOH)及固定对象堆(POH)的总占用仅约120MB,这与分析5GB大小的内存转储文件得到的结果一致。

已执行操作

  • 切换Server和Workstation GC模式,无明显差异。
  • 执行dotnet-dump collect --type Full收集内存转储,排查应用内的内存压力。
  • 在应用中添加dotnet计数器,监控Gen 0、1、2、LOH及堆大小,这些指标在用户离开站点后会回落。
  • 将应用切换到Windows环境运行,内存使用恢复正常,且会在一段时间后释放。
  • 通过dotnet-counters collect模拟典型用户负载,并绘制了GC Committed Bytes随时间变化的图表。

背景信息

  • 应用为Blazor Server类型
  • 部署在Azure的Linux App Service Plan(具体为P1v3)上

内容的提问来源于stack exchange,提问作者Adam A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:48:19