【问题标题】:AppDomain is marked for unload due to memory pressure由于内存压力,AppDomain 被标记为卸载
【发布时间】:2011-08-26 14:00:54
【问题描述】:

在 32 位 SQL 2005 Enterprise 机器上,我不断收到“AppDomain XX (DB_NAME.dbo[runtime].YY) 由于内存压力而被标记为卸载”。

  • 我有 8GB 物理内存
  • AWE 设置为使用 4.5GB
  • 没有-g512启动参数集
  • 此 SQL 实例正在侦听 3 个不同的端口

我注意到的其他事情包括:

  • 几乎没有分页
  • CPU 徘徊在 20-30% 左右,符合规范
  • MEMORYCLERK_SQLCONNECTIONPOOL 在 10616 左右
  • 我得到“AppDomain XX (DB_NAME.dbo[runtime].YY) created”,“AppDomain XX (DB_NAME.dbo[runtime].YY) 由于内存压力而被标记为卸载。”AppDomain XX (DB_NAME.dbo [runtime].YY) 已卸载。”全部在同一分钟内完成,并且每 5 分钟左右重复一次。

上面的数据库只有一个程序集,并且已经运行了好几个月。 这个问题最近才开始出现,我能想到的唯一变化是应用服务器将其池中的连接数从 200-300 增加到大约 1000。

谁能帮我解释一下这个问题?

【问题讨论】:

  • 您可以尝试在 Process Explorer 中查看一些与内存相关的统计信息:除了全局提交和物理内存图之外,查看 per-进程缺页计数,尤其是缺页增量(因为这表明进程造成了多少内存压力)。
  • 您是否指向外部压力而不是 SQL 本身?如果有外部压力,我不应该看到某种形式的分页吗?
  • 嗯,我想是的......我从来没有真正听说过不涉及分页的内存压力。你从哪里得到你的号码? (SQL Server 自己做“分页”吗?)
  • 我正在查看操作系统的物理内存。事实上,在任务管理器中,物理可用内存约为 2.5GB。
  • AWE 仅用于缓冲池,不适用于 .NET。它是一个运行嵌入式的普通 32 位进程,因此它本身只能使用 2gig 并记住这是 ADDRESS 空间,而不是实际内存使用。你真的应该使用 64 位操作系统和 64 位 SQL 服务器,系统中有超过 2gig 的内存。

标签: sql sql-server sql-server-2008 sql-server-2005


【解决方案1】:

使用 32 位操作系统和 DB,您将达到 4gb 内存的限制。 AWE 刚刚为 SQL Server 启用了限制内存,使其不会释放给其他进程。

您应该计划升级到 64 位版本以优化使用内存。

这里有更多指向类似问题的指针。

https://dba.stackexchange.com/questions/63720/app-domain-is-marked-for-unload-due-to-memory-pressure

【讨论】:

    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多