あれ、PC動作がちょっと重たいな。ウイルスチェックでも走っている?
といった時にタスクマネージャーでプロセス毎のCPU使用量、メモリ使用量を調べた経験はないでしょうか。
リソース消費しているプロセスを特定したり、メモリやCPUが十分か監視するために、
CPUやメモリの使用量一覧が分かると役に立ちます。
そこで、バッチとpowershellのget-processコマンドを利用して、
CPUとメモリの使用量一覧をテキストファイル出力する方法をご紹介します。
Windowsバッチファイルのサンプルコード形式です。
それでは、順に見ていきましょう!
CPU使用量が多い順にプロセス一覧をテキスト出力
バッチファイルを作成し、コードを記述してダブルクリック実行します。get_process_cpu.bat
として、次をコピペしてください。
@echo off
powershell.exe -Command "Get-Process | Sort-Object CPU -Descending | Select-Object ProcessName, @{Name='CPU usage';Expression={$_.CPU}}, @{Name='Memory Usage(MB)';Expression={[math]::Round(($_.WorkingSet / 1MB), 2)}} | Format-Table -AutoSize | Out-File -FilePath '%~dp0cpu_usage_list.txt'"
echo CPU usage list has been saved to cpu_usage_list.txt
pause
PowerShellを呼び出して、Get-Process
コマンドを実行します。
実行するとこのようになります。
先ほどのバッチファイルと同じディレクトリにテキストファイルができます。
出力されたテキストファイルを開くとこんな感じです。
プロセス一覧になっており、CPU使用量の列について、値が多い順に並んでいます。
目的通りに機能していることが確認できました。Sort-Object CPU -Descending
というのがCPU使用量順でした。
ということは、ここをメモリ用のなにがしかに変えれば、メモリ順にできそうですね。
メモリ使用量が多い順にプロセス一覧をテキスト出力
ということで、次は、メモリ使用量版を試してみましょう。
同様にバッチファイルを作成してください。
例では、get_process_mem.bat
としました。
@echo off
powershell.exe -Command "Get-Process | Sort-Object WorkingSet -Descending | Select-Object ProcessName, @{Name='CPU';Expression={$_.CPU}}, @{Name='WorkingSet(MB)';Expression={[math]::Round(($_.WorkingSet / 1MB), 2)}} | Format-Table -AutoSize | Out-File -FilePath '%~dp0mem_usage_list.txt'"
echo Memory usage list has been saved to mem_usage_list.txt
pause
同様に実行すると、mem_usage_list.txtが出力されます。
開いてみるとこんな感じです。
プロセス一覧で、メモリ使用量で降順にソートされています。
こうやって見てみると、私の環境では、chromeが一番メモリを使っているようです。
いくつかプロセスが走っていて、上位だけでも700MBぐらい使っているんですね。
メモリが1GBぐらいのPCだと、きっとカクカクしてしまうことでしょう。
ところでSearchAppsプロセスって何だろう・・・という具合に、状態を調べることもできそうです。
(ちなみにSearchAppsはWindows Searchで使うプロセスらしいです。)
ということで、無事に、バッチとget-processを使って、
CPUとメモリの使用量一覧をテキストファイルで出力することができました。
テキストファイル出力することで、履歴やトレンドにすることもできます。
分析してレポート化するなど、二次利用もできるようになります。
是非、ご活用してみてはいかがでしょうか。
今回は以上となります。
本記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!