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お探しですか?
デフォルトでは、タスクマネージャはメモリを「メモリ-プライベートワーキングセット」として表示します。
「メモリ-ワーキングセット」列を選択すると、タスクリストと同じ値が表示されます。
私はProcessHacker(TaskManではない)を実行しているので、次のスクリーンショットは少し異なりますが、違いを示しています。
> 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
プライベートメモリとワーキングセットメモリの違いの詳細については、以下のリンクを参照してください。