【发布时间】:2017-02-01 15:49:19
【问题描述】:
坦率地说,我很难过。这超出了我的经验。
我有一个 C# MVC 程序,它在 MemoryStream 中生成一个 zip 文件以供下载。通过单击 JavaScript 的按钮调用 action 方法。
唯一的问题是,在某些情况下,潜在的文件大小很容易超过 1 Gig,根据我的阅读,这是一个常见问题。我尝试在 IIS (IIS8) 上的请求过滤中将最大允许内容长度提高到 3000000000。我尝试将 requestLimits maxAllowedContentLength 添加到我的 web.config 中。 我什至尝试通过多次调用 action 方法来分解 zip(没有成功),尽管我还没有得到任何确认/否认这甚至是可能的。
在 IIS 或我的 web.config 中是否有任何我可以忽略的设置?这可能是公司网络问题,无法在应用开发者层面解决吗?
【问题讨论】:
-
尽管您没有提及您遇到的确切问题,但根据您问题上的标签,我假设您的内存不足。除了在服务器上放置更多 RAM 之外,没有其他解决方案。没有固有的下载限制,但如果你在内存中创建东西,显然它不能大于系统的可用内存。
-
值得一提的是,您还需要考虑多个请求。例如,如果您要创建一个 1GB 的文件,那么添加 1GB 的额外内存只会帮助一个请求。如果两个人尝试访问创建该 1GB 文件的同一操作,那么您将需要 2GB 的 RAM 来满足这两个请求。将创建的文件缓存到文件系统会有所帮助,因为您只需要用于初始创建的内存,但您应该确保在平均文件大小之上有足够的空间。
-
我已经向管理层申请了更多内存(但我没有屏住呼吸......)它已经有 8 个演出了。
-
8GB 对于一个中等规模的网站来说也不算什么。我有一个 32 GB 的站点,甚至没有在内存中做太多明确的事情(即,这只是用于工作线程池的内存)。诚然,我们每月提供超过 100 万的唯一身份,但与许多网站相比,即使这样也相对温和。
-
一个快速的经验法则是每个工作进程至少应该有 2-4 GB,并且每个离散的 CPU 内核应该有一个工作人员。但是,这只是基本的操作 RAM,如果您明确地在内存中执行操作,那么您将需要额外的 RAM。并且不要忘记操作系统本身,它会在开箱即用的 2-4 GB RAM 上运行。换句话说,如果你有一个工作进程,你可能需要多达 8GB 来处理标准请求,更不用说在内存中做额外的工作了。
标签: asp.net-mvc asp.net-mvc-4 download out-of-memory iis-8