【发布时间】:2015-03-16 22:14:21
【问题描述】:
我有一个具有 128MB RAM 的共享主机帐户,并且我的网站在它自己的应用程序池中。
网站很小,流量很低,但我不断收到以下错误:
A worker process serving application pool 'xxx v4.0 (Classic)' has requested a recycle because it reached its private bytes memory limit.
这种情况经常发生,会重新启动应用程序池。如果应用程序池重启太频繁,最终它会停止。然后,当我访问该站点时,我会收到 503 错误。
该站点是使用 c# 编写的,具有来自 ef 和 ado.net 的数据访问权限。我所有的数据库连接都在 using 语句中,我相信它们可以正确打开和关闭。
我已经与主机商谈过了,我可以将 RAM 升级到 256MB,这看起来确实可以让网站运行良好。但我有点担心,只是升级 RAM 只是暂时掩盖了问题。
在我将文件复制到我正在构建的服务器以进行发布之前,我在 Web 配置中将调试设置为 false。
当我在 Visual Studio 中运行解决方案时,我的 IIS 工作进程徘徊在 100 MB 左右。
我想我的问题是:
有什么方法可以在本地机器上复制我的托管环境? 一个相当小的网站超过 128MB 的 RAM 是否正常?
我有点不知道该尝试什么。任何帮助或指导将不胜感激。
其他可能重要的信息:
.NET 框架是 4.5 网络表格 使用AjaxControlToolkit(只加载我需要的脚本)
我查看了许多博客文章和类似问题,但似乎没有任何进展。
谢谢
吉姆
【问题讨论】:
-
这是一个猜测,但我会说你的代码中有内存泄漏。另一种猜测是检查您是否关闭了所有数据库连接。如果您还没有使用 using 语句,请更改代码以使用
-
猜二是静态类和方法
-
猜猜三是你有没有返回任何大数据集?
-
@Ewan,感谢您的建议!所有数据库连接都在 using 语句中,所以我很高兴它们很好。有一些静态类和方法,但不多。我会看看,看看我能不能改变这些。没有返回大数据集。网站使用超过 128MB 是否不寻常?
-
oo 猜四,带有购物袋的会话变量。我猜 100Mb 并不大,这真的取决于您的站点。您必须考虑通常在请求之间打开多少内容
标签: c# .net iis memory-management application-pool