Iis 7 如何检查上次回收的应用程序池

Iis 7 如何检查上次回收的应用程序池,iis-7,application-pool,recycle,Iis 7,Application Pool,Recycle,是否可以检查我上次回收应用程序池的时间,我想检查我上次回收应用程序池的日期,IIS中是否有我可以获取此信息的内容。如果启用了“登录回收”,您可以在事件查看器(系统日志)中看到此信息 如果不是,您可以使用PerfMon计数器查看W3WP.exe上代表您的应用程序池的进程运行时间(这将是自上次回收以来的秒数)您可以使用以下powershell代码片段轻松找到最新的回收时间: (Get-Process -Id <ProcessId>).StartTime (获取进程-Id)。开始时间

是否可以检查我上次回收应用程序池的时间,我想检查我上次回收应用程序池的日期,IIS中是否有我可以获取此信息的内容。

如果启用了“登录回收”,您可以在事件查看器(系统日志)中看到此信息


如果不是,您可以使用PerfMon计数器查看W3WP.exe上代表您的应用程序池的进程运行时间(这将是自上次回收以来的秒数)

您可以使用以下powershell代码片段轻松找到最新的回收时间:

(Get-Process -Id <ProcessId>).StartTime
(获取进程-Id)。开始时间
因此,请在任务管理器中查找web应用程序的进程id。
首先通过工具>选择列…添加以下列:选择PID命令行
查找任何w3wp.exe进程,通过检查命令行(应用程序池名称是其中的一部分)找到您的应用程序,并记下其PID。
然后运行powershell脚本以查找最新的回收时间:


希望这对您有所帮助。这将为您提供计算机上所有w3wp进程及其启动时间的列表。ErrorAction可防止commandlet在没有网站启动且因此不存在w3wp进程时抛出错误

ps w3wp -ErrorAction SilentlyContinue | select ProcessName, StartTime

在装有powershell v4.0的Server 2012 R2上测试要通过一个命令获取所有信息,请使用get-WMIOObject而不是get进程

Get-WmiObject Win32_Process -Filter "name = 'w3wp.exe'" | Select-Object Name, @{"name"="ApplicationPool";expression={(($_).CommandLine).split('"')[1] }},@{"name"="Starttime";expression={$_.ConvertToDateTime($_.CreationDate)}}

获取工作进程正常运行时间(推荐):

使用
Get Eventlog
可以使用
-After/-Before
参数进一步限制结果

要检查应用程序池是否在最后“X”分钟内回收,可以使用以下powershell代码段:

function isRecycledInLastNMinutes($appPoolName, $lminutes){
    $beforeDate = Get-Date -format 'u'
    $afterDate = $beforeDate.addMinutes(-$lminutes)
    $result = (Get-Eventlog -LogName system -Newest 1 -Source "WAS" -After $afterDate -Before $beforeDate -Message "*recycle of all worker processes in application pool '$appPoolName'*")
    if( $result.length -eq 1){
        return $true
    }else{
        retrun $false
    }
}
在Powershell中:

(ps -id (Get-IISAppPool -Name <name>).WorkerProcesses.ProcessId).StartTime
(ps-id(Get-iisappool-Name).workerprocess.ProcessId).StartTime
如果池已被回收,则出于某种原因,您可能需要重新导入模块以获取新的processId:

$pool = Get-IISAppPool -Name <name>

$pool.recycle()

Import-Module -Force IISAdministration

(ps -id (Get-IISAppPool -Name <name>).WorkerProcesses.ProcessId).StartTime
$pool=Get iisappool-Name
$pool.recycle()
导入模块-强制IISA管理
(ps-id(Get-iisappool-Name).workerprocess.ProcessId.StartTime)

Put logging statement in Application\u Start in Global.asax,即编程方式。如果您无法访问代码,那么事件查看器将是一个很好的查看位置。解释如何设置应用程序重新启动事件日志我问了一个问题,如果您处于无法访问事件日志的共享托管环境中,那么这可能会很有用。使用IIS管理单元是查找进程ID的另一种方法,并说:dir IIS:\AppPools\u APPNAME\uworkerprocess。别忘了以管理员的身份运行Powershell作为一行代码:
ps w3wp |在ps v4上选择ProcessName,StartTime
ps w3wp |选择ProcessName,Id,StartTime | ft-AutoSize
以显示进程的Id谢谢大家,我用这个来确定回收导致我们的一个应用程序池在启动后3小时内没有响应。错误发生在w3wp.exe和模块ntdll.dll上,之所以发现,是因为我们在监控服务器资源的夜间采集压力测试数据,发现了一个巨大的下降,一旦回收完成(或达到上一个空闲超时),就会返回。解决方法是简单地禁用回收,或设置为不影响客户端的特定时间。在事件查看器中的何处?
应用程序
日志<代码>系统日志?其他地方?开始菜单(Windows)>“事件查看器”如何检查登录是否已打开以进行回收?很好,要退出应用程序池名称,只需将其用单个引号括起来即可
(ps -id (Get-IISAppPool -Name <name>).WorkerProcesses.ProcessId).StartTime
$pool = Get-IISAppPool -Name <name>

$pool.recycle()

Import-Module -Force IISAdministration

(ps -id (Get-IISAppPool -Name <name>).WorkerProcesses.ProcessId).StartTime