【问题标题】:How to find memory consumption reasons SQL Server IIS如何查找内存消耗原因 SQL Server IIS
【发布时间】:2014-09-25 10:29:32
【问题描述】:

环境:

  • Windows 服务器 2012 r2
  • SQL Server 2014
  • ASP.NET MVC 5
  • 实体框架代码优先

我正在将 ASP.NET MVC 5 应用程序部署到服务器。

任务管理器上的 SQL Server 内存使用量在一小时内快速增长超过 5 个演出,并且网站无法正常运行。

SQL Server 内存消耗以恒定的速度增长,但从未减少。

如何在 SQL Server 中找到这种内存消耗的原因?

我可以负担任何商业解决方案。我只需要找到这个内存泄漏。

我只使用了 telerik 的跟踪,但我没有发现任何奇怪的东西,似乎所有 dbcontext 连接都已处理。

但是我只看到dbcontext连接没有被释放的时候sql server这么高的内存消耗。

我该怎么办?

如何找到这个内存泄漏?

【问题讨论】:

  • @marc_s:将此作为答案发布

标签: sql-server asp.net-mvc entity-framework iis


【解决方案1】:

我非常怀疑这是 内存泄漏 - 你定义了一个最大值吗? SQL Server 的内存大小?

如果不是 - 这是正常行为。

除非另有说明,否则 SQL Server 将占用越来越多的内存来保存用于在内存中回答查询的数据库页面(而不是一遍又一遍地从磁盘中获取它们)。

它将使用它可以获得的所有内存 - 或者尽可能多地使用你告诉它使用的最大值。它从不释放内存——SQL Server 怎么会知道给定的数据库页面不会在下一个传入请求中使用?它只是尽可能长时间地将页面保留在内存中 - 直到它耗尽(物理或配置的)内存。

【讨论】:

  • 不,我没有定义我的服务器和 ssd 上有 72 Gb 内存的最大内存,所以我没想到会发生这种情况。我如何确定我的所有 dbcontext 连接都已释放,这不是内存泄漏?
  • @1AmirJalali:将 SQL Server 的内存限制为例如100 MB(对于认真使用来说太少了 - 但只是为了演示)并检查它是否低于该限制。如果你的内存消耗保持在一个固定的水平 -> 你很好。
【解决方案2】:

常识和 - 文档。

SQL Server 将用尽所有内存作为允许的缓存(有一个限制它的设置),因为它假定它可以重用数据。这就是它变得快速的方式。光盘,甚至 SSD,都比 RAM 慢得多,因此任何缓存命中都会有很大帮助。

如果你真的坚持在低规格的东西上运行 sql server,那么我建议你为内存使用设置一个现实的限制。

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 2020-02-23
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2017-07-31
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多