web-dev-qa-db-ja.com

Windowsのコマンドラインから特定のプログラムによるメモリ使用量を正確に測定するにはどうすればよいですか?

Webサイトのメモリリークテストの自動化を作成しようとしています。 2つのページ間を移動するとメモリリークが発生するので、Seleniumにページ間を自動で移動させます。プロセスの前、それらのページ間を移動するたびに、および約150回の繰り返しの後、各ブラウザーのメモリ使用量がどの程度変化するかを知りたいと思います。

例としてchromeを使用して、tasklist | find "chrome.exe"を使用し、それらすべてのプロセスのメモリ使用量の出力を合計してみました。何か間違ったことをしているのか、それとも問題が発生しているのかわかりません。想定とは異なるデータが表示されますが、tasklistは、メモリ使用量に関してタスクマネージャーとは異なる数値を示しています。

今試してみると、tasklistのすべてのchrome.exeエントリ間の合計メモリ使用量は1259MBを示していましたが、タスクマネージャは約530MBを示しています。さらに、150回の反復を行った後、昨日tasklistは約1800MBを示していました(そしてメモリ使用量は頭打ちになり、それ以上は上がらなかった)が、タスクマネージャーは約3300MBが使用され、まだ増加していることを示していました。そのタブを閉じると、タスクマネージャーでのChromeのメモリ使用量が約700MBに減少しました。長時間実行したままにすると、ブラウザが最終的にクラッシュするため、tasklistを使用してもメモリリークの兆候は見られませんが、タスクマネージャでは確認できます。

tasklistとタスクマネージャーが異なる測定値を提供するのはなぜですか?タスクマネージャーが提供する番号をコマンドラインから取得して自動化する方法はありますか?私は実験していた https://docs.Microsoft.com/en-us/windows/desktop/api/Psapi/nf-psapi-getprocessmemoryinfo しかし、それが私が持っている情報かどうかはわかりません。 mお探しですか?

2
sheodox

タスクリストとタスクマネージャーが異なる測定値を提供するのはなぜですか?

デフォルトでは、タスクマネージャはメモリを「メモリ-プライベートワーキングセット」として表示します。

「メモリ-ワーキングセット」列を選択すると、タスクリストと同じ値が表示されます。

私はProcessHacker(TaskManではない)を実行しているので、次のスクリーンショットは少し異なりますが、違いを示しています。

enter image description here

> tasklist | find "firefox.exe"
firefox.exe                   1308 Console                    1     446952 K
firefox.exe                  10036 Console                    1      44540 K
firefox.exe                   9664 Console                    1     305092 K
firefox.exe                   9352 Console                    1     433052 K
firefox.exe                   7764 Console                    1     282256 K
firefox.exe                   2108 Console                    1     334196 K
firefox.exe                   6956 Console                    1     459480 K

プライベートメモリとワーキングセットメモリの違いの詳細については、以下のリンクを参照してください。


参考文献

1
DavidPostill