3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windowsの特定のプロセスのメモリ使用量を記録する

Last updated at Posted at 2019-08-15

目的

あるプロセスがメモリリークしている。その推移を記録する。

結論

プロセスIDが1228の推移を1秒間隔で1228.csvに記録するには、PowerShellプロンプトを開き、以下のようにする。停止するにはCtrl+C

while ($true) {ps -Id 1228 | Add-Member Time (Get-Date) -PassThru | Export-Csv -Path 1228.csv -Append  -NoTypeInformation; sleep 1}

詳細

Windowsでデフォルトで使えるPowerShellを使ってなんとかする。

プロセス一覧は ps (Get-Process)コマンドレットで得られます。

例えばfirefoxのプロセスだけ欲しいなら以下のようにします。

ps firefox

特定のプロセスだけ欲しいならIdを指定します。Idはpsコマンドレットで得られます。

ps -Id 1228

いつの状態か記録するために、時刻プロパティを追加しましょう。Add-Member で追加できます。
現在時刻は Get-Date で得られます、()をつけないと Get-Date と出力されてしまう。 -PassThru オプションで新たに拡張されたオブジェクトをパイプラインに渡します。

ps -Id 1228 | Add-Member Time (Get-Date) -PassThru

CSV形式で保存するには Export-Csv です。繰り返し実行するので -Append オプションをつけます。タイプ情報は不要なので -NoTypeInformation オプションもつけておく。

ps -Id 1228 | Add-Member Time (Get-Date) -PassThru | Export-Csv -Path 1228.csv -Append -NoTypeInformation

定期的に実行したいので無限ループします。sleep で間隔(秒単位)を指定。

while ($true) {ps -Id 1228 | Add-Member Time (Get-Date) -PassThru | Export-Csv -Path 1228.csv -Append  -NoTypeInformation; sleep 1}

感想

1行でなんとかなりました。
定期実行を無限ループで処理しているのがちょっと気になるところです。
また、メモリ使用量に限らずプロセス情報すべて記録しているので無駄があります。記録する項目を指定したほうがいいかもしれない。

これでリーク調査はまだしていないので実際のところ役に立つのかは不明です。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?