我尝试在 Azure Web 角色启动时执行以下命令来设置回收应用程序池的特定时间:
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.recycling.periodicRestart.schedule.[value='00:08:00']
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到错误:
ERROR ( messsage:Cannot find requested collection element. )
Run Code Online (Sandbox Code Playgroud)
有人知道如何使用 appcmd 设置默认应用程序池设置以使其在 UTC 上午 8:00 回收吗?请注意,应用程序池回收的特定时间的集合最初是空的。
我正在尝试使用 bat 文件中的命令回收多个应用程序池,但它不起作用。
这是我的文件:
%windir%\system32\inetsrv\appcmd recycle apppool /apppool.name:AppPool1
%windir%\system32\inetsrv\appcmd recycle apppool /apppool.name:AppPool2
%windir%\system32\inetsrv\appcmd recycle apppool /apppool.name:AppPool3
%windir%\system32\inetsrv\appcmd recycle apppool /apppool.name:AppPool4
Run Code Online (Sandbox Code Playgroud)
这是 cmd 中的响应:
Failed to process input: The parameter 'recycle' must begin with a / or - (HRESULT=80070057).
Run Code Online (Sandbox Code Playgroud)
我尝试让命令在每一行的开头开始,但它也不起作用。
感谢您的帮助。
我正在尝试使用该类创建应用程序池ServerManager。这是我的代码:
using (ServerManager serverManager = new ServerManager()) {
if (!serverManager.ApplicationPools.Any(p => p.Name == poolName)) {
ApplicationPool newPool = serverManager.ApplicationPools.Add(poolName);
newPool.ManagedRuntimeVersion = "v4.0";
newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
newPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
newPool.ProcessModel.UserName = user;
newPool.ProcessModel.Password = pass;
serverManager.CommitChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序池已创建,但未为其设置标识 - IIS 管理器中的应用程序池表中的标识列为空。我究竟做错了什么?
用户采用域\用户名的形式,并且传递的凭据是正确的(代码的另一部分检查这些凭据)。
我刚刚在 IIS 中针对我的用户的应用程序池身份更新了密码,使其保持最新,如下所示:
但是现在,当我运行 IIS 管理器时,当我尝试列出应用程序池、列出站点或重新启动时,它会冻结。这意味着我无法返回并仔细检查我在应用程序池中输入的密码是否正确。
Windows 事件日志未显示任何错误或警告。我也尝试过重新启动电脑,但这没有帮助。
有没有人以前遇到过这种情况,或者知道可能是什么原因造成的?
我运行的是 Windows 10 和 IIS 版本 10.0.10586.0
我有一个 ASP.NET MVC Web 应用程序,它在具有大量可用 RAM 的服务器 (Windows Server 2016) 上的自己的应用程序池(.NET 4.7.1 应用程序、64 位、IIS 10)中运行。在启动应用程序并加载第一个网页后,我查看任务管理器,发现 w3wp.exe 进程使用了大量内存:
考虑到它只是一个网络应用程序,我认为这有点太多了。所以我启动 dotMemory 并附加到该进程。我得到这些结果:
此处,它表示已使用的总内存为 1.1 GB(不仅仅是 853 MB),其中非托管内存为 429.5 MB,其余的是堆。
当我得到它的快照时(如屏幕截图所示),它显示总共 1.08 GB,其中 .NET 为 75.06 MB(其余部分是非托管的)。这些数字似乎并没有相加。一个显示 429.5 非托管内存,另一个显示 1 GB 非托管内存。这是否意味着堆在快照中被计为非托管内存?
所有 dotMemory 让我看到的是 63.73 MB 的 .NET 使用内存,在这里我可以看到我拥有多少个类型的对象。
我很想知道剩下的是什么。我无法查看的另一 GB 内存中有什么?是GC还没发布的东西吗?如果是,为什么在 dotMemory 中运行“强制 GC”不会显着减少它?
另外,所有非托管内存从哪里来?我在网上能找到的只是,如果某些位图或 P/Invoke 内容未正确释放,通常会发生非托管内存泄漏。但我的应用程序池从一开始就有这种用法(因此它不会随着时间的推移而累积泄漏),并且它既不处理位图或图像,也不调用本机 DLL 或使用这样做的第三方库。另一种选择可能是它是 ASP.NET 缓存,但它只使用很少,而且我认为在单页加载后它不会有 400 MB。
我过去观察到,如果 IIS 应用程序池有大量可用的可用内存,那么它们可能会非常贪婪,但这似乎相当过多 - 1 GB 与 60 MB。我不明白那里发生了什么事。
我不认为存在内存泄漏,因为我可以让应用程序池运行数周,并且内存不会显着增加。只是当我认为它不应该使用那么多内存时,它使用了相当多的内存。
您能帮我找到一些学习资源或工具来帮助我调查该问题吗?
在应用程序池上,我的 .net core(3.1) 应用程序突然关闭(在生产服务器中),我经常在事件日志中收到以下条目:无法正常关闭应用程序“MACHINE/WEBROOT/APPHOST/SITEName”。
migration iis application-pool asp.net-core-mvc asp.net-core-webapi
我需要知道如何检测我正在运行的当前应用程序池,因此我可以通过编程方式对其进行回收.
有谁知道如何为IIS6做这个?
我目前用于回收应用程序池的代码是:
/// <summary>
/// Recycle an application pool
/// </summary>
/// <param name="IIsApplicationPool"></param>
public static void RecycleAppPool(string IIsApplicationPool) {
ManagementScope scope = new ManagementScope(@"\\localhost\root\MicrosoftIISv2");
scope.Connect();
ManagementObject appPool = new ManagementObject(scope, new ManagementPath("IIsApplicationPool.Name='W3SVC/AppPools/" + IIsApplicationPool + "'"), null);
appPool.InvokeMethod("Recycle", null, null);
}
Run Code Online (Sandbox Code Playgroud) 我的服务器上运行的网站很少.
我在应用程序中有一个"诊断"页面,显示当前进程的内存量(非常有用).
现在这个应用程序"链接"到另一个应用程序,我希望我的诊断页面能够显示另一个w3wp进程的内存.
为了获得内存量,我使用了一个简单的代码:
var process = Process.GetProcessesByName("w3wp");
string memory = this.ToMemoryString(process.WorkingSet64);
Run Code Online (Sandbox Code Playgroud)
如何识别我的第二个w3wp进程,知道它的应用程序池?
我找到了一个相应的线程,但没有适当的答案: 在IIS6应用程序池上查看特定于进程的性能统计信息的可靠方法
谢谢
我们在Web应用程序中使用NServiceBus,每次将代码部署到生产环境时,我们都必须删除文件夹中的Temporary Files:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
Run Code Online (Sandbox Code Playgroud)
我们按照此处的说明解决此问题:
http://www.nservicebus.com/faq/TypeNotRegisteredInSerializer.aspx
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个更永久的解决方案吗?每次部署新代码时,我都觉得我正在与此作斗争.从代码处理此问题的最佳方法是什么?如果这不起作用,最好是每次部署新代码时停止应用程序池,删除文件并重新启动应用程序池吗?
谢谢你的建议.
我在一个项目中使用临时数据库,该项目处于Application_End:
protected void Application_End() {
if (_db != null) _db.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
问题是Application_End似乎经常在浏览我的web项目时被调用 - 似乎当我编辑db中的对象时,更改成功,数据库被处理,并且当我被重定向到索引 - 已创建新数据库并显示未更改的对象,就好像什么都没发生一样.
不应该在会话结束时或在一定的空闲时间之后调用Application_End吗?
谁能告诉我如何才能确保只在我实际使用完应用程序时调用Application_End?
application-pool ×10
iis ×5
c# ×3
recycle ×2
w3wp ×2
.net ×1
asp.net ×1
azure ×1
batch-file ×1
deployment ×1
iis-6 ×1
iis-manager ×1
migration ×1
nservicebus ×1