标签: application-pool

IIS应用程序池 - 停止/启动与回收

我注意到在我的一个生产网络应用程序中,当我手动回收应用程序池时,基于在任务管理器中观察,回收的工作进程可能需要超过60秒以实际完全销毁.但是,如果我完全停止应用程序池,则工作进程几乎立即消失 - 在1-2秒内消失.

所以,我的问题是双重的:

a)当应用程序池被回收而不是停止时,为什么要花费这么长时间来销毁进程(更有意义的是,释放由它使用/锁定的资源); 和

b)假设我已经阻止流量被定向到服务器,是否有任何理由不停止/启动而不是回收?


编辑:
为了澄清,在我回收或停止应用程序池之前,我阻止流量被发送到有问题的服务器(服务器在负载平衡群集中,我从负载均衡器中删除服务器).因此,理论上,在我对应用程序池执行任何操作时,不应该向网站发出请求.


编辑Part Deux:
在阅读Igal的链接后,对我来说似乎很明显发生了什么.当我回收应用程序池时,新进程已启动,但由于根本没有流量,因此它没有将新进程注册为正常运行,因此在超时之前它不会关闭旧进程(即90秒).

有了这些知识,我很清楚"回收"功能专门用于在实时服务器的中游使用,并且因为我事先手动排出流量,所以我应该使用停止/启动.

iis worker-process application-pool recycle

35
推荐指数
3
解决办法
3万
查看次数

拥有专用应用程序池而不是将Web应用程序保留在一个默认应用程序池中的优缺点

使用专用应用程序池而不是将Web应用程序保存在一个默认应用程序池中的优缺点是什么?

asp.net iis application-pool

34
推荐指数
4
解决办法
1万
查看次数

以编程方式获取应用程序池标识

如何在C#中以编程方式获取appPool的标识?我想要应用程序池用户而不是当前登录的用户.

c# iis application-pool applicationpoolidentity

33
推荐指数
2
解决办法
3万
查看次数

32
推荐指数
1
解决办法
7万
查看次数

如何在IIS 7.5中配置应用程序池时它会在停止时自动重新启动?

我的网站每天都停机几次,当我检查应用程序池(IIS 7.5)时,我看到它已停止,我必须重新启动它手动.如何设置它,以便在出现任何错误时自动重启.

asp.net application-pool iis-7.5

30
推荐指数
1
解决办法
3万
查看次数

人们如何在部署大型应用时解决应用池回收问题?

目前,我们的应用程序(58个项目,大型asp.net MVC 3前端)的构建/部署需要大约15-20秒来加载,因为它通过整个"回收应用程序池"(发布配置).

如果改变了人们的答案,我们确实有一个网络农场,但问题确实是:

人们在维护窗口不可行的大规模应用程序中做了什么(我们是一个24/7非常活跃的网站),以最大限度地减少部署后应用程序池回收的初始"第一次打击"?

我们已经使用了许多工具来分析启动时间,并且似乎没有任何方法可以将其降低,所以我正在寻找的是人们使用什么技术来最小化大的影响应用部署影响用户.

asp.net-mvc iis-7 application-pool recycle

28
推荐指数
2
解决办法
8034
查看次数

每个应用程序池的内存使用情况

我使用IIS 7.5,我在不同的应用程序池中有一些ASP.NET站点和一些Web服务.在当前,服务器的内存使用率很高,那么我怎么知道每个应用程序池都使用了内存?有什么办法吗?有什么建议吗?

asp.net iis application-pool iis-7.5

28
推荐指数
2
解决办法
3万
查看次数

创建使用.NET 4.0的应用程序池

我使用以下代码创建一个应用程序池:

var metabasePath = string.Format(@"IIS://{0}/W3SVC/AppPools", serverName);
DirectoryEntry newpool;
DirectoryEntry apppools = new DirectoryEntry(metabasePath);
newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool");
newpool.CommitChanges();
Run Code Online (Sandbox Code Playgroud)

如何指定应用程序池应使用.NET Framework 4.0?

c# iis-7 directoryservices application-pool

24
推荐指数
2
解决办法
2万
查看次数

为什么我的IIS7应用程序池在从ASP.NET页面调用的DLL中发生异常后关闭?

我已经阅读了ASP.NET应用程序池关闭问题IIS 7.5的帖子:应用程序池的问题,但他们没有回答我的问题.

我有一个C#ASP.NET页面,在代码隐藏中实例化一个来自通过BIN目录提供的DLL的类,然后在这个实例上调用一个方法.DLL中的方法System.ArgumentException由于DataRow对象中的非现有列而抛出.事件日志显示以下错误:

Source: ASP.NET 2.0.50727.0
Application ID: /LM/W3SVC/1/ROOT/...
Process ID: 9476
Exception: System.ArgumentException
Message: Column 'someColumn' does not belong to table.
StrackTrace: 
Run Code Online (Sandbox Code Playgroud)

ASP.NET页面中的调用代码将方法调用包装在通用try-catch块中.当我请求页面时,这会崩溃我的IIS实例的相应应用程序池,并且我的网站不再可用(错误503).我手动必须重新启动应用程序池,然后该站点再次运行.

根据请求更新try catch ASP.NET代码后面的块:

try
{
    SomeExternalClass someExternalClass = new SomeExternalClass();
    someExternalClass.SomeMethod( someId );
}
catch( Exception ex )
{
    // "smp" is an instance of "StatusMessagePanel", a control we use on all pages 
    // to show error information, basically a div container …
Run Code Online (Sandbox Code Playgroud)

iis-7 exception application-pool

23
推荐指数
1
解决办法
3万
查看次数

应用程序池关闭

每当我尝试在4.0应用程序池中启动一个站点时立即关闭(如果它已经启动),事件日志中会留下一个事件:

Windows无法找到本地配置文件,并使用临时配置文件登录.当您注销时,您对此配置文件所做的更改将会丢失.指定的用户是IIS APPPOOL\DefaultAppPool

然后是另一个事件日志条目Windows无法登录,因为无法加载您的个人资料.检查您是否已连接到网络,以及网络是否正常运行.

这台机器正在运行Win 7 Ultimate

如果错误实际上是事件日志中指示的内容,我该如何重置应用程序池用户?

iis application-pool

22
推荐指数
1
解决办法
2万
查看次数