asp.net - 为什么 ASP.NET Web 服务占用如此多的内存?

标签 asp.net .net iis memory

我有一个 .net Web 服务 (Web API 2),它接受请求以从数据库获取数据。返回的数据不是很大,通常只有 1-3 kb(大约来自数据库的 1-15 行)。我在 IIS 中设置了它并对其进行了一些批量测试,在一个小时左右的时间里它受到了多次攻击,因此它收到了数千个请求。当我查看 w3wp.exe(IIS 工作进程)时,内存不断增加,直到超过 5 GB,CPU 使用率接近 100%,然后最终 Web 服务停止工作。服务器有 16 GB RAM,我们刚刚从 8 GB 增加了它。5 GB 内存正常吗?这看起来很多,我本以为垃圾收集会更好地处理这个问题。我在使用性能监视器或其他东西来解决此类问题方面没有太多经验。

对我可以看的内容有什么建议吗?会不会有内存泄漏?当应用程序池达到一定的内存量时,我应该尝试让应用程序池回收吗?

更新 - 我们有另一个 .net Web 服务,它甚至不访问数据库或任何外部文件或任何东西,并且它的行为方式相同 - 内存不断增加。我们的计划是可能将每个应用程序池设置为每 x 分钟或达到一定内存量时回收一次。

以下是 API 中典型函数的示例:

[Route("patient/{patientKey}/activations")]
public async Task<IHttpActionResult> GetActivations(int patientKey)
{
     try
     {
          ActivationList actList = new ActivationList();

          actList.Activations = await _actProc.GetByPatient(patientKey);

          return Ok<ActivationList>(actList);
     }
     catch (Exception ex)
     {
         return new BadRequestWithInfoResult(Translators.makeXML<ErrorReturn>(CreateError(ex)));
     }
}

public async Task<List<Activation>> GetByPatient(long patientKey)
{
     using (var dbConn = _database.CreateConnection())
     {
          List<DBActivation> lst_Activation = await dbConn.FetchAsync<DBActivation>("select * from fact.Activation where PatientKey = " + patientKey.ToString());

          List<Activation> Activations = lst_Activation.Select(x => _mapper.Map<Activation>(x)).ToList<Activation>();              

          return Activations;
     }
}

最佳答案

激活对象中有什么?如果激活有许多子项,则在映射期间,它可能会尝试填充所有子项以及子项的子项,等等...如果您使用 EF 延迟加载,EF 将为每个子项群体创建一个子查询。

关于asp.net - 为什么 ASP.NET Web 服务占用如此多的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55710236/

相关文章:

asp.net - ASP.NET session 的不明确性

c# - 使用 ASP.Net Core 定位 net core 应用程序和完整的 net461

c# - 在 Windows 中检测文件 'COPY' 操作

c# - 将字符串转换为 UCS2 编码

c# - 从 Web 应用程序构建和控制计划任务或服务

c# - Azure 实例 - 我的直接更改丢失了

.net - 在将 SOAP 消息发送到 .NET 中的 WebService 之前获取它

ssl - 在 IIS 10 Windows Server 2019 上启用 TLS 1.3

visual-studio - 验证 web.config 的工具

ASP.NET Core 更改 AccessDenied 路由