PowerShell을 사용하여 시스템 성능 정보 출력

소개



PowerShell을 사용하여 시스템 성능 정보를 측정하고 CVS 형식으로 출력하는 방법을 조사하고 구현해 보았습니다.
본 기사는 조사·실장한 것을 비망으로 정리한 것이 됩니다.

실행 환경



OS: Windows 10 Enterprise
PowerShell 버전: 5.1.17763.1490

PowerShell 버전 확인 방법



PowerShell을 시작하고 $PSVersionTable를 입력하고 Enter를 누르면 PowerShell 버전이 표시됩니다.


Get-Counter cmdlet을 사용하여 측정 정보 얻기



Get-Counter cmdlet 설명



Get-Counter cmdlet을 사용하여 측정 정보를 얻을 수 있습니다.


Get-Counter cmdlet 형식


Get-Counter [카운터] [옵션]


다음은 Get-Counter cmdlet의 주요 옵션입니다.


옵션
의미


-Counter
측정할 카운터를 지정합니다. 선택

-ListSet
카운터 세트 정보 얻기

-Continuous
[Ctrl]+[C] 키를 누를 때까지 지속적으로 취득

-MaxSamples
검색할 샘플 데이터의 수 지정

-SampleInterval
측정 간격을 초 단위로 지정


측정할 카운터를 지정하고 CSV 형식으로 출력해보기



참고 사이트를 바탕으로, 측정 대상으로 하는 카운터를 결정해 간다.
이번은 CPU, 메모리, 디스크의 카운터로부터 병목 지표로서 사용할 수 있는 것들을 발췌해 본다.
아래를 PowerShell에서 실행하면 계측 결과가 CSV로 출력된다.
# カウンターの指定
$Counters = @(
    '\Processor(_Total)\% Processor Time',
    '\System\Processor Queue Length',
    '\Memory\Available Mbytes',
    '\Memory\Pages/sec',
    '\Process(_Total)\Working Set',
    '\PhysicalDisk(*)\Avg. Disk Queue Length',
    '\LogicalDisk(*)\Avg. Disk Queue Length'
)
# 例:1秒間隔で計測し、1つのカウンターにつき最大5つのデータを取得してCSV形式で出力
Get-Counter -Counter $Counters -MaxSamples 5  -SampleInterval 1 | ForEach {
    $_.CounterSamples | ForEach {
        [pscustomobject]@{
            TimeStamp = $_.TimeStamp
            Path = $_.Path
            Value = $_.CookedValue
        }
    }
} | Export-Csv -Path PerfMonCounters.csv -NoTypeInformation
例:CSV出力結果
PerfMonCounters.csv

"TimeStamp","Path","Value"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\processor(_total)\% processor time","24.1294437645353"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\system\processor queue length","1"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\memory\available mbytes","608"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\memory\pages/sec","11.8296868159422"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\process(_total)\working set","3208744960"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\physicaldisk(0 c:)\avg. disk queue length","0.0172272941833824"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\physicaldisk(1 e:)\avg. disk queue length","0"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\physicaldisk(2 f:)\avg. disk queue length","0"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\physicaldisk(_total)\avg. disk queue length","0.0172272941833824"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\logicaldisk(c:)\avg. disk queue length","0.0172832084842202"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\logicaldisk(harddiskvolume4)\avg. disk queue length","0"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\logicaldisk(e:)\avg. disk queue length","0"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\logicaldisk(f:)\avg. disk queue length","0"
"2020/12/16 23:54:04","\\desktop-5gk0ns1\logicaldisk(_total)\avg. disk queue length","0.0172832084842202"
・
・
・

백그라운드 작업에서 성능 측정 수행



성능 측정을 백그라운드 작업으로 실행하는 방법을 생각해보십시오.
배치 처리 실행중의 퍼포먼스 계측을 실시하고 싶은 경우는, 하기의 실장 이미지와 같이 하면 대응 가능이라고 확인할 수 있었다.
# パフォーマンス計測をバックグラウンドジョブとして実行
Start-Job -Name PerfMonCounters -ScriptBlock {
    $Counters = @(
        '\Processor(_Total)\% Processor Time',
        '\System\Processor Queue Length',
        '\Memory\Available Mbytes',
        '\Memory\Pages/sec',
        '\Process(_Total)\Working Set',
        '\PhysicalDisk(*)\Avg. Disk Queue Length',
        '\LogicalDisk(*)\Avg. Disk Queue Length'
    )
    Get-Counter -Counter $Counters -MaxSamples 5  -SampleInterval 1 | ForEach {
        $_.CounterSamples | ForEach {
            [pscustomobject]@{
                TimeStamp = $_.TimeStamp
                Path = $_.Path
                Value = $_.CookedValue
            }
        }
    }
}

-------------------------------------------
~ここで計測対象とするバッチ処理を起動させる~
-------------------------------------------

# バッチ処理が完了したら、パフォーマンス計測結果をCSVへ出力
Receive-Job -Name PerfMonCounters | Export-Csv -Path PerfMonCounters.csv -NoTypeInformation

# パフォーマンス計測ジョブ終了
Stop-Job -Name PerfMonCounters
Remove-Job -Name PerfMonCounters

참고로 한 사이트


  • 【 Get-Counter 】 cmdlet――시스템의 퍼포먼스를 계측한다
  • 퍼포먼스 모니터로 디스크(PhysicalDisk) 감시할 때의 주된 카운터에 대해+ 구체적으로 어디를 카운트하고 있는 것인가? 그림으로 표현해 보았습니다.
  • 부하 테스트시의 서버 모니터링 방법 ~Windows편~
  • 백그라운드 작업
  • 좋은 웹페이지 즐겨찾기