Windows

免費應用程序或腳本來監控應用程序池記憶體使用情況

  • September 24, 2010

我想要一個顯示以下內容的應用程序或腳本:工作程序、應用程序池名稱、記憶體使用情況以及可選的 cpu 使用情況。我熟悉使用

%windir%\system32\inetsrv\appcmd.exe 列表 wp

但這只是讓我得到workerproces id和應用程序池名稱。然後我把它和交叉引用任務管理器。這可行,但我想要一個更快的 - 幾乎像儀表板一樣的資訊顯示。我想一定有某種解決方案可以顯示資訊,而無需像流程資源管理器那樣點擊。任何人都有他們特別使用的東西嗎?這在powershell中可能嗎?

如果您沒有 IIS 7 和提供程序,則可以使用 WMI。附加的腳本適用於您的大多數要求,CPU 使用率除外。將以下腳本另存為 get-webserverapppoolstats.ps1 (或任何您想要的)。

您可以使用以下命令執行腳本:

./Get-WebServerAppPoolStats.ps1 ‘Server1’, ‘Server2’, ‘Server3’ -IntegratedAuthentication OR Get-Content servers.txt | ./Get-WebServerAppPoolStats.ps1 -IntegratedAuthentication

param (
   $webserver = $null,
   $username,
   $password,
   [switch]$IntegratedAuthentication)

BEGIN
{
   $path = $MyInvocation.MyCommand.Path

   if ($webserver -ne $null)
   {
       if ($IntegratedAuthentication)
       {
           $webserver | &$path -IntegratedAuthentication
       }
       else
       {
           $webserver | &$path -username $username -password $password
       }
   }
   $OFS = ', '
   $Fields = 'CommandLine', 'Name', 'CreationDate', 'ProcessID', 'WorkingSetSize', 'ThreadCount', 'PageFileUsage', 'PageFaults' 

   $query = @"
   Select $fields
   From Win32_Process
   Where name = 'w3wp.exe'
"@

   $AppPool =  @{Name='Application Pool';Expression={($_.commandline).split(' ')[-1]}}
   $Process = @{Name='Process';Expression={$_.name}}
   $RunningSince = @{Name='Running since';Expression={[System.Management.ManagementDateTimeconverter]::ToDateTime($_.creationdate)}}
   $Memory = @{Name='Memory Used';Expression={'{0:#,#}' -f $_.WorkingSetSize}}
   $Threads = @{Name='Thread Count';Expression={$_.threadcount}}
   $PageFile = @{Name='Page File Size';Expression={'{0:#,#}' -f $_.pagefileusage}}
   $PageFaults = @{Name='Page Faults';Expression={'{0:#,#}' -f $_.pagefaults}} 
}

PROCESS
{
   $server = $_ 

   if ($server -ne $null)
   {
       if ($IntegratedAuthentication)
       {   
           $result = Get-WmiObject -Query $query -ComputerName $server
       }
       else
       {
           $securepassword = ConvertTo-SecureString $password -AsPlainText -Force
           $cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securepassword

           $result = Get-WmiObject -Query $query -ComputerName $server -Credential $cred 

       }
       $Server = @{Name='Server';Expression={$server}}
       $result | Select-Object $Server, $AppPool, $Process, $RunningSince, $Memory, $Threads, $PageFile, $pageFaults
   }
}

引用自:https://serverfault.com/questions/28100