🎼

Windows でのパフォーマンス異常解析にむけた情報採取準備ツール「CLUE」

2021/10/18に公開

Microsoft Blog にて、タイトルのツールが紹介されており、使ってみました。

ツールの公式サイト (GitHub) は下記です。

環境

  • Windows Server 2019

インストール方法

公式リポジトリから Clue_1.1.6.zip をダウンロードし、解凍して Setup.bat を管理者にて実行すれば OK

なんですが、インストール時に管理者権限で起動しているかどうかの確認を行っている箇所において、英語以外の環境ではうまく動作しないそうです。下記のようにプルリクエストが投げられています。

残念ながらこのプルリクエストは Approve されていない (zip ファイルに反映されていない) ので、プルリクエストの内容に従い _setup.ps1 ファイルの中身を書き換えておきましょう。function Test-AdminRights の中身を下記のように書き換えれば OK です。

function Test-AdminRights
{
    param([string] $Log = '.\Clue.log')

    $isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")

    if ($isAdmin)
    {
        Write-Log ('[Test-AdminRights] User has administrator rights') -Log $Log
    }
    else
    {
         Write-Log ('[Test-AdminRights] User does not have administrator rights') -Log $Log
    }
    return $isAdmin
}

この変更を行ったうえで管理者にて実行すれば、インストールは問題なく進むはずです。

なお、インストール中にネットワーク共有のパスやメールアドレスを求められますが、利用していなければ空で良いそうです。

使ってみる

インストール後、すぐにツールが有効になります。再起動は不要です。

いくつかパフォーマンス異常の条件が設定されており、設定別にタスクスケジューラ上にタスクが作成されます。この定期的に起動するタスクスケジューラ上のタスクによって、この条件に該当した状況が発生した場合には取得したログが固められ C:¥ClueOutput に出力される、といった動作になっています。

どんな条件設定がある?

既定で用意されている取得条件は下記とのことです。

  • Single CPU over 90% for more than 3 seconds.
  • Free System PTEs of less than 50000 (kernel address space is low)
  • System Committed memory greater than 90% (indicates one or more memory leaks that are consuming the system resources)
  • Kernel Pool Paged virtual address space greater than 10% of system committed memory (indicates a driver leak in pool paged)
  • Kernel Pool NonPaged virtual address space greater than 10% of physical memory (indicates a driver leak in pool nonpaged)
  • Disk latency of greater than 25 ms for 3 or more seconds (includes high consuming processes, disk filter drivers, page file usage, and more)
  • High CPU by WMI (includes WMI tracing to identify the query causing it)
  • High thermal temperatures (traces CPU and power usage)
  • High battery drains greater than 20% of battery capacity within one hour (traces CPU, GPU, and power usage)
  • Has a User-initiated trace start optimized for application hangs. The user can initiate a wait analysis trace to determine why Windows, or an application is hanging.

ためしに CpuStres ツールで CPU 使用率を 100% にしたところ、正常にフォルダに様々なファイルが出力されました。

基本的には、ETL ファイル (Evelt Trace Log)、BLG ファイル (Perfmon Log)、Tasklist.csv あたりを使って解析していく感じですね。

条件設定はどこで?

config.xml にて、その設定箇所があります。例えば、ひとつ目の「Single CPU over 90% for more than 3 seconds」は、下記の箇所で設定されていることがわかります。

<Rule Type="Counter" Enabled="True" Name="Counter-ProcessorTimeGt90" Ran="0" RunLimit="10" CounterPath="\Processor Information(*)% Processor Time" Exclude="_Total" SampleInterval="1" MaxSamples="3" Operator="gt" Threshold="90" OnStartActions="Tasklist,EtlCpu-Start" OnEndActions="EtlCpu-End,PalCollector,ToolConfig,ToolLog" MaxTraceTimeInSeconds="30" StartImmediately="True" />

この記述をベースに、タスクスケジューラ上でタスクが作成されるようになっています。

つまり、もし自分でカスタマイズした場合は、ここのファイルを書き換えてからインストールすれば OK ということですね。

どのくらいディスクサイズが必要?

ブログ情報によると、おおよそ 4GB 程度あれば充分とのことです。

2. Confirm you have 2-4 GB free on your c: drive

確かに、条件に合致せず退避しない分は破棄される動作となっているため、平穏な環境では 4GB あれば充分かなと思います。

ただ、条件に合致する回数が多いと出力する (抽出して退避する) 量が増えてしまうことに直結しますので、ツールの目的や確認頻度によってサイジングしておくことをオススメします。

そのほか

出力先フォルダの設定や、ツールの負荷が許容できない時の抽出レベルの設定など、個別に設定できる部分があります。マニュアル (Clue Usage Guide) に記載がありますので、一読をオススメします。

最後に

冒頭で紹介したブログにも書かれているように、パフォーマンス異常時のトラブルシュートは事前に情報を採取しておくことが欠かせないのですが、なかなか取得の条件を決めたり設定をしておくことに難儀することはあると思います。そんな時のとっかかりとしても、このツールは結構便利に使えます。

#べき論としては普段のパフォーマンス情報の取得も必要なので、このツール等を参考にして「普段採取する情報」も整理できると良いですね。

Discussion