2023-08-01 プロセスのメモリ使用量に関する指標(VSS, RSS, PSS, USS)
プロセスのメモリ使用量に関する指標
- VSS (Virtual Set Size)
- RSS (Resident Set Size)
- PSS (Proportional Set Size)
- USS (Unique Set Size)
ref. プロセスのメモリ使用量に関する指標を学ぶ (VSS, RSS, PSS, USS) - リネオブログ - リネオソリューションズ
上記事よりまとめ。
- VSS (Virtual Set Size)
- プロセスがアクセスできるメモリ領域サイズの総和
- VSS には仮想メモリ上にのみ確保されている領域も計上されるため、プロセスがまだ使用していないメモリ領域も含まれる
- VSS は RSS に比べて大きくなることが多い
- RSS (Resident Set Size)
- プロセスが確保している物理メモリの使用量
- RSS は VSS に比べて小さくなることが多い
- 物理メモリの使用量の指標として、RSS は VSS よりも役に立つ
- RSS は複数のプロセス間で共有されているメモリ領域も合計して算出する
- 大きな共有ライブラリを使用しているだけで RSS は大きくなりがち
- PSS (Proportional Set Size)
- RSS のうち共有メモリの使用量をプロセス間で等分することで得られる物理メモリの使用量
- 物理メモリの使用量が大きなプロセスを特定したい場合、まずは PSS が大きな値を示しているプロセスに着目してみるのが良い
- USS (Unique Set Size)
- RSS のうち共有メモリの使用量を除いた物理メモリの使用量
- USS はプロセスが使用している物理メモリの実体を把握するのに役立つ
実際に確認してみる
Railsアプリケーションをpumaをワーカー数4で立ち上げて、メモリ使用量を確認してみる。
$ ps -eo pid,%mem,vsz,rss,cmd --sort=-%mem
PID %MEM VSZ RSS CMD
806 0.7 294372 73472 puma 5.6.6 (tcp://localhost:3000) [app]
810 0.6 971192 66572 puma: cluster worker 1: 806 [app]
812 0.6 971192 66572 puma: cluster worker 2: 806 [app]
815 0.6 971192 66572 puma: cluster worker 3: 806 [app]
809 0.6 971192 66568 puma: cluster worker 0: 806 [app]
863 0.0 8588 3928 ps -eo pid,%mem,vsz,rss,cmd --sort=-%mem
1 0.0 4612 3628 bash
466 0.0 4476 3508 bash
なおVSZはVSSと同じ意味。
VSS(Virtual Set Size) = Virtual Memory Size = VSZ
procs
Rust製のprocsを使うとこんな感じ。
# procs --sortd UsageMem
PID User │ TTY CPU MEM:▼ CPU Time MEM │ Command
│ [%] [%] [%] │
2240 root │ pts/0 0.0 0.9 00:00:02 0.9 │ puma: cluster worker 2: 806 [app]
806 root │ pts/0 0.0 0.8 00:00:06 0.8 │ puma 5.6.6 (tcp://localhost:3000) [app]
2239 root │ pts/0 0.0 0.7 00:00:02 0.7 │ puma: cluster worker 0: 806 [app]
2084 root │ pts/0 0.0 0.7 00:00:02 0.7 │ puma: cluster worker 3: 806 [app]
2238 root │ pts/0 0.0 0.7 00:00:02 0.7 │ puma: cluster worker 1: 806 [app]
2487 root │ pts/1 0.0 0.0 00:00:00 0.0 │ bash
1 root │ pts/0 0.0 0.0 00:00:00 0.0 │ bash
smem
PSS, USS を確認するための smem を使ってみるとこう。
# smem
PID User Command Swap USS PSS RSS
2487 root bash 0 584 1487 3552
1 root bash 0 660 1563 3628
6037 root /usr/bin/python3 /usr/bin/s 0 12948 13239 14776
2238 root puma: cluster worker 1: 806 0 8032 22930 71812
2239 root puma: cluster worker 0: 806 0 8044 22942 71824
2084 root puma: cluster worker 3: 806 0 8824 23336 71832
806 root puma 5.6.6 (tcp://localhost 0 25660 37030 78552
2240 root puma: cluster worker 2: 806 0 50340 58818 91792