使工作进程回收所需的使用内存量的经验法则?

发布于 2024-07-19 12:34:44 字数 495 浏览 13 评论 0原文

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

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

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

在 IIS5 或 IIS6 终止工作进程或崩溃之前,您可以加载到内存中的最大数据量是多少,是否有人有经验法则?

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

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

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

I've got a code base with lots of this:

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

I don't control my IIS server, so I can't see the system log or do instrumentation, I just get to see my request fail to return (white page of death) and sometimes YSOD with Out of Memory error.

Does anyone have a rule of thumb for what is the most data you can load up into memory before IIS5 or IIS6 will kill the work process or just keel over and die?

Or better yet, is there an API call I an make, something like:

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

On my XP Pro workstation I can get get an ASP.NET page to successfully deal with a very large byte array in memory, but these results obviously weren't applicable to a real shared server.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

复古式 2024-07-26 12:34:44

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

她还发表了一篇很好的文章,解释了为什么会出现在这里:

A餐厅类比

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

According to Tess Ferrandez's talk at TechEd, you can start seeing Out Of Memory exceptions on a 32bit server when you have about 800MB in Private Bytes or 1.4GB in Virtual Bytes.

She also had a good post about why this is here:

A restaurant analogy

Other points she made included thinking about what you're serialising into session - for example serialising a 1MB dataset can result in 15-20MB of memory used on the server every page as that data is serialised and de-serialised.

诗化ㄋ丶相逢 2024-07-26 12:34:44

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

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

With IIS6 in native mode you can configure the limits for each Application Pool.

With IIS5 it's configured using the element in machine.config as a percentage of total system memory - default is 60%.

伴随着你 2024-07-26 12:34:44

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

YSOD可能最好通过围绕大分配的try/catch来处理。

For IIS 6, you'll likely run into the memory recycling limits PeriodicRestartPrivateMemory and PeriodicRestartMemory. I think on XP, it's 60% of physical memory. At least that's what I remember about asp.net 1.1, I'm not sure about 2.0

The YSOD is probably best handled with try/catch around the large allocations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文