我不明白为什么当我只有一个网站和一个应用程序池时,任务管理器中有两个ASP.NET w3wp进程.为什么有两个进程在运行?我用Google搜索了这个并查看了MSDN但找不到答案.
我正在尝试调试应用程序中的内存泄漏.我理解线程和多线程生活在一个进程中的概念,但我不明白为什么有多个进程.
我特别询问哪些方案可能导致多个进程运行.
我们使用Kentico CMS,我与他们交换了关于网络花园部署的电子邮件.
我们在具有8个CPU核心的服务器上运行单个站点.在与Kentico的咨询热线,我们没有改变应用程序池Web园从默认即它被设置为1的工作进程的最大数设定.
我们的经验是,该网站只使用其中一个cpu核心 - 其他人都闲置.当我通过电子邮件向他们发送电子邮件时,他们的回答是操作系统/ IIS会处理此问题并根据需要使用其他核心,即使应用程序池只有一个工作进程.
现在,我非常尊重Kentico的人,但这对我来说似乎不对?
当然,如果我们想要使用所有核心,我们需要允许八个工作进程(并在SQL服务器中实现会话状态存储)?
非常感谢
托尼
我在asp.net应用程序中有很多Singleton实现,并且出于某些性能原因希望将我的应用程序移动到IIS Web Garden环境.
CMIIW,使用n个工作进程迁移到IIS Web Garden,每个工作进程中将创建一个单独的对象,这使得它不再是单个对象,因为n > 1.
我可以在IIS Web Garden中再次制作所有这些单例对象吗?
我刚刚在IIS应用程序池中偶然发现了"Web Garden"的概念.也就是说,当多个进程服务于同一网页时.据我所知,这意味着ASP.NET InProc会话与Web场具有相同的问题.
我的问题是,假设您的生产环境是一个Web场,但您的开发/测试环境不是,那么在dev/test中设置"Web Garden"是否有帮助?我认为这有助于及早发现任何多进程/服务器问题,或者至少确认一切都按预期工作.
允许IIS为每个应用程序池生成多个工作进程(Web-garden配置)是否具有显着的性能优势.什么perfmon计数器表明这可能是一个好主意?
我知道会话状态必须用完,但还有其他问题吗?
我正在向RouteTable动态添加路由,但更新不会传播到其他进程:
using (RouteTable.Routes.GetWriteLock())
{
RouteTable.Routes.MapPageRoute(
String.Format("_{0}", routeName),
routeName,
"~/Template.aspx",
true,
new RouteValueDictionary {{"page", routeName}});
}
Run Code Online (Sandbox Code Playgroud)
这正确地创建了正确的路由,因为我有时可以访问它,但是如果切换到新进程或稍后再尝试,我就无法访问该页面.如果我然后重新启动应用程序池,它工作正常.此外,如果我等待足够长的时间,几个小时,当流程被回收,路线工作.
我认为这是在一个进程上创建路由的结果,并且仅在未来的进程回收中.
干草关于如何推动路线更新的想法?
我的ASP.NET Web应用程序在IIS 7.5下运行正常.但我想确保它已准备好在Web场中运行.所以我在我的开发机上启用了web garden.(在应用程序池中设置Maximum Worker Processes = 2.)
点击该网站似乎没问题,但在任何AJAX请求,我得到500.19错误.错误如下:
无法访问请求的页面,因为页面的相关配置数据无效.
无法使用组合键属性'statusCode,subStatusCode'分别设置为'404,-1'来添加类型'error'的重复集合条目
在我的网络配置中,我有这个:
<system.webServer>
<httpErrors>
<error statusCode="404" path="Home/NotFound" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
看起来很好,我想需要它.但为了好玩,我删除了httpErrors部分.然后我得到:
无法连接到远程服务器
当然,我查看了MS的500.19错误故障排除.但我猜这个错误是一个红鲱鱼.这个问题与我的应用程序池或我的代码有关,或者与消息告诉我的内容有关.正如我所说,一切都运行得很好,有1个Max Worker Process.
有任何想法吗?
更新:我已经意识到我提到的第二个错误"无法连接到远程服务器"是由我的应用程序引起的真正错误.因此web.config中的<error>元素是500.19错误的原因(掩盖了真正的错误).也许我不需要这个元素,因为我在system.web中有一个类似的元素,它本身似乎有所需的影响.
问题解决了.但是,我仍然想知道为什么在单一工作模式下没有问题,并且它在Web园模式中中断了?
我们有一个在IIS Web-Garden中运行的ASP.Net Web应用程序 - 它被配置为最多分配四个进程.在我们的Web应用程序中,第一个访问该站点的用户会导致加载所有缓存的项目.由于我们在IIS Web-Garden中运行,因此最终需要最多四个用户为四个Web-Garden进程中的每一个构建缓存.这个缓存构建需要30-40秒,我们试图让它更快,但不太可能再改进它.
这是不可接受的,我们的任务是让所有人都能快速访问网站(无需等待缓存初始化).我想使用一种抓取网站来预热缓存的解决方案.问题是Web-Garden功能似乎是一个黑盒子 - 你无法控制IIS是否/何时决定在下一个HTTP请求命中时加载第2,第3或第4个进程.
对我来说,这似乎是一个常见问题,但寻找解决方案却收效甚微.我的问题是,有没有办法通过HTTP标头或其他一些构造给IIS一个提示,你希望它加载或至少路由到进程2,3,4等?