首页 新闻 会员 周边 捐助

asp.net core 7应用占用大量内存?

0
悬赏园豆:10 [已解决问题] 解决于 2022-12-20 11:36

服务器是windwos 2008R2、6核16G内存,其中SQL Server分配最大内存使用量为6G。
另外就是IIS中有几个很老的Web程序,稳定远行好多年了,也没有更新过,占用内存和CPU都很低,几乎可以忽略不计。
平常 cpu 占用都在5%以下,内存占用有6-7个G左右。

最近开发新项目,就用这台服务器当测试服务器用,新项目有三个程序,都是用asp.net core开发的,当前版本为7.0,分另是,一个webapi、一个状态服务和一个Blazor Server项目。

然后就老收到服务器内存过高报警,打开任务管理器/性能页面显示物理内存使用都在15.7、8左右,但切换进程选项查看这几个应用的内存使用量都不是太大,api 300M左右,Blazor Server300M左右、状态服务100M的样子。

我尝试将这几个程序退出,退出一个后内存立马下降3G左右,3个全部退出后就回到先前的状态。
反之,这几个应用中随便打开一个,任务管理器/性能页面内存图表立马就会上升将近3G左右,三个全部打开,几乎就是15.5+

这几个程序、api和Blazor Server都相对复杂些,用到了EF Core(7.0),可能会存因编码不当引起的内存占用过高,但状态服务这个非常简单,就一个IHostedService实现类,用的是sqlsugar。测试仅打开状态服务也是会一下就涨3G的内存占用。

最近才遇到,先前用.net6时没报警过,也没太注意内存占用。

问题补充:

我在开发机本机(win10/16G内存)运行和VS以调试模式运行这几个程序,任务管理器/进程 显示,内存使用量都是100M以下,VS调试时显示也不超过300M。
任务管理器/性能图表也几乎没有变化。

先前.net6的时候,状态服务和api在一个项目中,还没有拆分出来,所以不能断定这个就一定是升级到.net7才出现的(也就是以前只有2个应用,现在有三个)。

为了排除是因为编码引起的或其它原因,目前准备用Vs分别新建两个默认的asp.net core 项目(6.0和7.0),然后放到服务器上看看可否重现这个问题。

测试结果:

Adming的主页 Adming | 初学一级 | 园豆:119
提问于:2022-11-17 15:04
< >
分享
最佳答案
1

退回.net6.0编译后正常了...

Adming | 初学一级 |园豆:119 | 2022-11-18 16:48

这个问题可能是是 .NET 7 GC 的问题引起的

in .NET 7 we have enabled new Regions functionality within the GC. Here are the details: #43844. Since this was a foundational change, we also shipped a separate GC which keeps the previous "Segments" functionality -- in case there are some issues like this one.

1月会发布更新,可以试试目前的临时解决方法:添加环境变量 COMPlus_GCName=libclrgc.so(linux) 或者 COMPlus_GCName=clrgc.dll(windows)

详见 https://github.com/dotnet/runtime/issues/78959

dudu | 园豆:30925 (高人七级) | 2022-12-29 10:55

@dudu: 测试了一下,修改环境变量没起到作用

dongfo | 园豆:241 (菜鸟二级) | 2023-05-09 23:44
其他回答(3)
0

没用过.net7,插个眼

收获园豆:10
但乱红尘熊 | 园豆:773 (小虾三级) | 2022-11-18 13:34
0

删了删了删了删了删了删了删了删了删了删了删了删了删了

python探索者 | 园豆:198 (初学一级) | 2022-11-28 14:56

干嘛要删了 ?

支持(0) 反对(0) Adming | 园豆:119 (初学一级) | 2022-11-28 19:10
0

这个问题.Net8也有,看来微软不会再为老系统修复这个问题

dongfo | 园豆:241 (菜鸟二级) | 2024-02-26 09:11

设置环境变量
DOTNET_GCName=clrgc.dll
DOTNET_EnableWriteXorExecute=0

或者以批处理的方式启动应用程序
@echo off
set DOTNET_GCName=clrgc.dll
set DOTNET_EnableWriteXorExecute=0
start "theApp" TheAppNet7.x64.exe

支持(0) 反对(0) dongfo | 园豆:241 (菜鸟二级) | 2024-05-06 09:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册