标签: application-pool

我应该将ASP.NET应用程序池设置为自动回收吗?

我有许多ASP.NET(4.0)Web应用程序,在每个请求期间似乎泄漏(少量)内存.这是一个很小的数量,对于大多数用例来说,它不会成长为几周甚至几个月的问题.我通常会尝试关闭应用程序管理的任何连接,避免状态变量(或我的单例的实例变量)等.

我的问题是 - 这是ASP.NET应用程序的正常行为吗?我已经关闭了在闲置20分钟后回收应用程序池的默认(IIS 7)行为.我这样做是因为应用程序需要几分钟来构建其内部缓存,我希望避免对用户体验产生负面影响(让他们在发出请求时等待应用程序启动).

我知道这可以通过序列化缓存或加快缓存生成过程来缓解,但我的问题更多地与它的原理有关:我个人认为依赖IIS自动回收功能作为一种绑定方法.我错了吗?我只是没有看到垃圾收集器在工作,因为应用程序的内存使用量与可用内存量相比不够高?还是我应该深入研究记忆问题?

任何见解将不胜感激.

asp.net iis-7 application-pool recycle

13
推荐指数
1
解决办法
8964
查看次数

以编程方式创建新的IIS网站时,如何将其添加到现有的应用程序池中?

我已经成功地自动创建了一个新的IIS网站,但是我编写的代码并不关心应用程序池,它只是添加到DefaultAppPool中.但是,我想将这个新创建的站点添加到现有的应用程序池中.

这是我用来创建新网站的代码.

        var w3Svc = new DirectoryEntry(string.Format("IIS://{0}/w3svc", webserver));
        var newsite = new object[] { serverComment, new object[] { serverBindings }, homeDirectory };
        var websiteId = w3Svc.Invoke("CreateNewSite", newsite);
        site.Invoke("Start", null);
        site.CommitChanges();
Run Code Online (Sandbox Code Playgroud)

< 更新 >

虽然这与问题没有直接关系,但以下是上面使用的一些示例值.这可能有助于人们更准确地理解上面代码的作用.

  • webServer:"localhost"
  • serverComment:"testing.dev"
  • serverBindings:":80:testing.dev"
  • homeDirectory:"c:\ inetpub\wwwroot\testing \"

< / update >

如果我知道我希望此网站所在的应用程序池的名称,我该如何找到它并将其添加到该网站?

c# iis application-pool

12
推荐指数
1
解决办法
2710
查看次数

将.NET Framework版本的应用程序池更改为3.5?

我在Web服务器(Server 2008 Enterprise)上安装了.NET Framework 3.5 SP1,因此运行IIS 7.0.

我想更改现有站点使用的.NET Framework版本.因此,我右键单击相应的应用程序池并选择"编辑应用程序池"..NET Framework下拉列表不包含框架3.5的显式条目,但仅包括2.0.50727.

这只是因为3.5版核心RTL的版本仍然是2.0?或者我是否需要做一些额外的事情才能让IIS看到版本3.5?(尝试重启IIS).

iis-7 application-pool .net-3.5

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

IIS 7.5应用程序池使用错误的%APPDATA%作为自定义用户身份

我希望我的MVC3 Web应用程序访问%APPDATA%(例如C:\Users\MyUsername\AppData\Roaming在Windows 7上),因为我在那里存储配置文件.因此,我在IIS中创建了一个具有用户"MyUsername"标识的应用程序池,通过使用该帐户登录创建了该用户的配置文件,并打开了"加载用户配置文件"选项(默认情况下仍为true).模拟被关闭.

现在我遇到%APPDATA%(在C#中)的问题:

appdataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Run Code Online (Sandbox Code Playgroud)

解决c:\windows\system32\inetsrv而不是C:\Users\MyUsername\AppData\Roaming.

更新:更确切地说,上面的C#代码返回一个空字符串,以便Path.GetFullPath(Path.Combine(appdataDir, "MyAppName"))将当前路径预先设置为我的应用程序名称,从而产生c:\windows\system32\inetsrv\MyAppName.

我知道我之前使用Windows Server 2008 R2上的相同Web应用程序完成了这项工作,现在我在Windows 7上
使用与IIS相同的主要版本7.5来解决此问题.我使用了与以前相同的过程:创建了一个新用户,以该用户身份登录以创建配置文件和APPDATA目录,然后添加具有此标识的应用程序池,最后将Web应用程序添加到此池中.

有任何想法吗?

iis application-pool appdata iis-7.5 applicationpoolidentity

11
推荐指数
3
解决办法
7833
查看次数

IIS中的会话超时和空闲超时有什么不同?

在IIS中,选择默认网站>属性>主目录>应用程序设置>配置>选项,默认会话超时为20分钟.此外,选择应用程序池> DefaultAppPool>属性,在性能选项卡中,有空闲超时,默认为20分钟.这两次超时有什么不同?

iis application-pool session-timeout

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

IIS 7.0提供503错误并停止应用程序池

当我启动应用程序池,并在该池中的应用程序中请求页面时,我收到"HTTP错误503.该服务不可用".

如果我查看IIS中的应用程序池,我可以看到它现在已停止.转到事件查看器我发现此错误消息:

'应用程序池Badge.Web的标识无效.为身份指定的用户名或密码可能不正确,或者用户可能没有批量登录权限.如果未更正标识,则在应用程序池收到第一个请求时将禁用应用程序池.如果批处理登录权限导致问题,则在Windows进程激活服务(WAS)重试登录之前,必须在授予权限后更改IIS配置存储中的标识.如果在处理完第一次应用程序池请求后标识仍然无效,则将禁用应用程序池.数据字段包含错误编号.

我非常确定我使用的凭证是正确的.其他东西导致应用程序池停止.

asp.net iis iis-7 application-pool event-viewer

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

同一应用程序池中的网站是否共享加载的库?

我有一个带有IIS 8.0的Windows Server 2012.它托管了许多用户群较少的小型网站,这些网站在任何方面都不是关键任务.对于小型网站,我的意思是应用程序代码和内存占用量非常低,但由于加载的库(如EntityFramework),应用程序的内存消耗在新启动和空闲时大约为140MB.

一般来说,这对于一个成熟的网络服务器来说并不是什么大不了的事,但我只有一个带有4GB内存的VPS,它还可以运行其他几个应用程序(数据库,BIND,hMail等).我正在使用它作为开发服务器来使用许多不同的技术.因此,我在服务数十个~140MB w3wp时快速耗尽RAM.

除了在空闲时暂停,我还想减少内存消耗,同时仍然使用我想要使用的任何框架或库 - 这实际上是整个事情的目的.

简而言之:由于应用程序不仅共享相同的.NET版本,而且还有一些像EF或MVC这样的库,在一个app_pool中运行多个站点以便它们可以共享库更有意义吗?或者,无论如何,每个站点都会加载自己的副本(由于此处讨论的不同的应用程序域)?

奖金问题:在考虑硬件升级时,1GB的RAM是20美元/月,但是将整个服务器放在SSD上是10美元/月.虽然我知道从页面文件中读取总是比从RAM中读取要慢得多但我正在考虑在SSD上使用大页面文件而不是以两倍的价格购买1g的额外RAM - 再次,网站的速度不是关键,他们应该工作.这有什么意义吗?

asp.net iis application-pool

11
推荐指数
1
解决办法
4319
查看次数

IIS 8.5:应用程序池的虚拟帐户(IIS AppPool\{应用程序池名称}不可用

我在Windows 2012 R2 Core框上运行IIS 8.5.我创建了一个名为"MyNewAppPool"的新应用程序池.我有一个名为"MyNewWebsite.com"的网站实例在"MyNewAppPool"应用程序池中运行.用于"MyNewAppPool"的标识是"ApplicationPoolIdentity".

我的理解是,我可以使用自动生成的本地虚拟帐户为IIS 8.5中的应用程序池分配安全权限,该帐户将命名为"IIS AppPool\{Application Pool Name}".

因此,在"MyNewWebsite.com"目录的Windows资源管理器中,我应该能够为虚拟用户帐户"IIS AppPool\MyNewAppPool"分配读/写权限.我找不到此用户帐户来分配任何权限.我正在搜索本地计算机位置而不是整个域.我可以找到"IIS应用程序池\默认应用"帐户,但是我不想给DefaultAppPPool下运行MyNewWebsite.com,我想给MyNewAppPool应用程序池下运行它.

谁能告诉我为什么我找不到MyNewAppPool自动生成的虚拟账户?

iis application-pool windows-server-2012 windows-server-2012-r2 iis-8.5

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

每当重新加载App域时,如何强制IIS应用程序池重新启动?

我们有一个ASP.NET MVC 4应用程序,它链接到传统的本机代码.问题是这个遗留代码具有在启动时构建的全局静态代码,但由于本机代码对App Domains一无所知,因此在重新加载App Domain时不会重新初始化该代码.在重新启动应用程序池进程之前,这会导致我们的应用程序中出现不正确的行为或崩溃.

因此,我想强制应用程序池在我们的应用程序的App Domain被回收时进行回收.IIS中是否有这样的设置,或者是否正在卸载域时我可以在我的应用程序中调用代码?

关于我的设置的一些信息,

  1. ASP.NET MVC 4应用程序
  2. IIS 7.5,但如果需要,我可以移动到8
  3. 我可以确保每个应用程序池有一个应用程序,因此我不会影响其他应用程序.

更新

根据下面的答案,我连接到AppDomain卸载事件,并使用类似于以下的代码来回收应用程序池.

try
{
   // Find the worker process running us and from that our AppPool
   int pid = Process.GetCurrentProcess().Id;
   var manager = new ServerManager();
   WorkerProcess process = (from p in manager.WorkerProcesses where p.ProcessId == pid select p).FirstOrDefault();

   // From the name, find the AppPool and recycle it
   if ( process != null )
   {
      ApplicationPool pool = (from p in manager.ApplicationPools where p.Name == process.AppPoolName …
Run Code Online (Sandbox Code Playgroud)

asp.net iis appdomain application-pool asp.net-mvc-4

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

如何防止IIS在不使用时关闭网站?

我有一个在IIS下托管的Web应用程序.它是一个数据仓库,在启动过程中需要在内存中实例化大量项目(大约需要20分钟才能完全设置).由于该网站对我们公司至关重要,因此该系统必须在白天100%在线,并且只能在下班时间重新启动.

出于某种原因,当一段时间没有使用时,这个Web应用程序似乎是"离线"的.我知道这一点,因为访问网站时缓存未完全实例化.这是无法接受的.

我不清楚为什么该网站被关闭.应用程序池仅设置为每天凌晨4:00(现在是上午11点)进行回收.

是否有其他设置,我不知道IIS部分导致它自动关闭网站?

Addl注意:在Visual Studio 中的IISExpress中运行时,网站不会自动关闭.只有IIS上托管的生产版本才会关闭.

这是运行网站的应用程序池的高级设置屏幕.(不确定它是否有用.)

应用程序池设置

我在IIS 7.5,Server 2008 R2上.它是一个ASP.NET 5 Web应用程序.

iis application-pool iis-7.5 application-restart

10
推荐指数
1
解决办法
9471
查看次数