【问题标题】:Rule of thumb for amount of usage memory it takes to make a worker process recycle?使工作进程回收所需的使用内存量的经验法则?
【发布时间】:2009-05-09 20:56:36
【问题描述】:

我有一个包含很多这样的代码库:

byte[] contents = FileUtils.FileToByteArray(FileOfGartantuanProportions);

我不控制我的 IIS 服务器,所以我看不到系统日志或进行检测,我只是看到我的请求未能返回(死亡白页),有时出现内存不足错误的 YSOD。

在 IIS5 或 IIS6 终止工作进程或干脆死掉之前,有没有人有一个经验法则,你可以加载到内存中的最多数据是多少?

或者更好的是,我是否有一个 API 调用,例如:

  if(!IsEnoughMemoryFor(FileOfGartantuanProportion.Length)) throw new SomeException() ;

在我的 XP Pro 工作站上,我可以获得一个 ASP.NET 页面来成功处理内存中非常大的字节数组,但这些结果显然不适用于真正的共享服务器。

【问题讨论】:

    标签: c# .net asp.net worker-process


    【解决方案1】:

    根据Tess Ferrandez 在 TechEd 上的演讲,当您有大约 800MB 的私有字节或 1.4GB 的虚拟字节时,您可以开始在 32 位服务器上看到内存不足异常。

    她还发表了一篇关于为什么会出现在这里的好帖子:

    A restaurant analogy

    她提出的其他观点包括考虑您要序列化到会话中的内容 - 例如,序列化 1MB 数据集可能会导致服务器每页使用 15-20MB 内存,因为该数据被序列化和反序列化。

    【讨论】:

      【解决方案2】:

      在本机模式下使用 IIS6,您可以为每个应用程序池配置限制。

      对于 IIS5,它使用 machine.config 中的元素作为总系统内存的百分比进行配置 - 默认为 60%。

      【讨论】:

        【解决方案3】:

        对于 IIS 6,您可能会遇到 memory recycling limits PeriodicRestartPrivateMemory 和 PeriodicRestartMemory。我认为在 XP 上,它是物理内存的 60%。至少那是我对 asp.net 1.1 的记忆,我不确定 2.0

        YSOD 可能最好使用 try/catch 围绕大分配来处理。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-20
          • 2013-02-20
          • 1970-01-01
          • 2011-07-15
          • 1970-01-01
          • 1970-01-01
          • 2010-09-27
          • 1970-01-01
          相关资源
          最近更新 更多