【发布时间】:2019-11-15 20:53:35
【问题描述】:
我有一个托管在 IIS (Windows 2012R2/IIS 8.5) 上的 ASP.Net Web 应用程序。应用程序不断地从内存中删除静态资源(即静态类/集合),导致随机请求的速度大幅下降。
这通常发生在 IIS 工作进程内存超过 900Mb 左右(在开发设置中,总内存为 4GB),然后下降到 350Mb 左右。我们的生产设置也是如此(16Gb 内存和应用程序最多消耗 1.9GB,然后降至 800Mb)
设置:
- Windows 2012 R2
- IIS 8.5
- 目标框架:4.7.2
- 平台目标:X64(我将它从
Any CPU强制转换为X64以排除 32 位内存限制)。
IIS 设置:
- .Net CLR 版本:4.0
- 启用 32 位应用程序:错误
- 启动模式:始终运行
- 空闲超时:0
- 空闲超时操作:挂起
- 私有内存限制:0
如您所见,我已经排除了几乎所有我能想到的。持续下降有什么原因吗? .Net CLR 不应该将静态类保存在内存中而不是随机删除它们吗?还是我错过了什么?
【问题讨论】:
-
不断掉线,是不是和池子重启有关?
-
如果一段时间内没有请求,我认为 IIS 只会关闭你
AppDomain。您是否在此静态字段中存储了大量数据?为什么要在静态字段中存储大量数据?如果是某种缓存,为什么不存储在redis中(例如)? -
@BugFinder 不,我通过启用池重新启动日志记录确保不是这种情况。同样在这种情况下,内存应该下降到零而不是减半。
-
@Achilles “同样在这种情况下,内存应该下降到零而不是减半” - 前提是你没有泄漏内存
-
@Achilles,正如你所说,你有日志记录 - 你能记录 AppDomain.DomainUnload 事件吗?
标签: asp.net iis asp.net-web-api