目前,单个应用程序池中大约有 600 个 .net 站点。我们开始遇到内存不足异常,必须回收应用程序池才能解决问题。
我知道通常来说,每个站点都有单独的应用程序池是个好主意,但我不确定在同一台服务器上拥有 600 多个应用程序池是否现实。我们每月还将添加 30 多个新站点。
我的问题是:
- 每个应用程序池应该有多少个网站
- 每个服务器应使用多少个应用程序池(特别是 Windows Server 2008 标准、双 Xeon 2.53、8GB RAM、64 位)
此外,这些站点在两台服务器之间实现负载平衡。
答案1
不需要过多思考或搜索技术资料 - 您已经超出了限制。
一般来说,有些网站非常简单,一次编译后就不需要太多思考,但也有一些复杂的网站可能需要数据库访问或其他数据处理,需要计算机的一些资源。
还存在这样的情况:您的 600 个站点中的一个站点存在严重的错误,或者占用了大量的内存,并影响其余 599 个站点。
所有具有闭循环功能的站点都可能随时使您崩溃:)
另外,该池在您的根磁盘上创建了至少 600 个目录,您的操作系统位于该目录中,这也是一个问题...大量的读/写编译器、您随网站提供的电子邮件、iis 日志文件、缓存文件...
太多网站...
答案2
应用程序池本质上是管理应用程序线程的进程集合。我建议下一步是分析应用程序的使用情况统计信息,然后确定单个应用程序池中可以成功管理的数量。这完全取决于硬件的功能和应用程序,实际上没有一个适用于所有情况的通用数字。
答案3
我将首先创建一些不同的场景。创建一个只有一个站点的应用程序池,然后创建一个有 5 个站点的应用程序池,一个有 10 个站点的应用程序池,一个有 50 个站点的应用程序池。
查看每个场景所使用的资源。然后,您可以得出一个适合您的应用程序的数字。
另外,值得研究一下应用程序池上的网络花园。这样,单个应用程序池就可以将其负载分散到多个进程中。
答案4
首先,我真正想考虑的是在这里添加服务器而不是应用程序池——这听起来有点拥挤。
至于手头的问题,如果您的部署过程足够不干涉(对于这么多的应用程序来说应该是这样的),您也可以自动创建适当的应用程序池等等。