FreeBSD のプロセスの使っている swap を追う2021年02月16日 11時46分46秒

まずは、top コマンド。top -oswap -w で出る。
67 processes:  3 running, 64 sleeping
CPU:  3.3% user,  0.0% nice,  1.7% system,  0.7% interrupt, 94.3% idle
Mem: 472M Active, 352M Inact, 743M Laundry, 621M Wired, 66M Buf, 87M Free
ARC: 258M Total, 47M MFU, 143M MRU, 4185K Anon, 4916K Header, 60M Other
     119M Compressed, 330M Uncompressed, 2.78:1 Ratio
Swap: 4096M Total, 2596M Used, 1500M Free, 63% Inuse, 4096B In
 
  PID USERNAME    THR PRI NICE   SIZE    RES SWAP STATE    C   TIME    WCPU COM
17433 uyota        50  25    0  1049M   645M   0B CPU1     1  24:37  10.81% sea
19432 uyota         7  21    0   259M   157M   0B select   0  17:10   3.26% Xor
19446 uyota         1  20    0  8308K  1488K   0B nanslp   3  28:26   1.76% xos
  842 root          1  20    0  4624K   636K   0B select   3  14:06   1.52% mou
19491 uyota         4  21    0    93M    21M   0B select   1   1:50   1.40% xfc
19488 uyota         4  20    0    49M    13M   0B select   3   0:55   0.45% xfw
19452 uyota         1  20    0  6328K  1500K   0B CPU3     3   7:38   0.44% sys
19441 uyota         1  20    0    13M  4108K   0B select   2   0:14   0.13% xte
19495 uyota         4  20    0    58M    11M   0B select   2   0:24   0.13% xfd
 1000 root          1  20    0  8384K  1244K   0B select   0  11:30   0.10% hal
  997 root          1  20    0  8384K  1248K   0B select   2  11:44   0.09% hal
19443 uyota         1  20    0    13M  5496K   0B select   3   0:04   0.09% xte
19459 uyota         1  20    0  6548K  1168K   0B select   0   1:53   0.08% top
17685 uyota         1  20    0    56M    33M   0B select   3   0:06   0.04% syl
19481 uyota         4  20    0    19M  1940K   0B select   2   0:04   0.04% at-
ただ、ここに見える全ての SWAP が 0。この様子だと、プロセスが完全にスワップアウトしていないと表示されない様だ。つまり、半分だけスワップアウトされて、まだ動いているプロセスの表示は 0B。

また、procstat -av でもスワップされているメモリ領域が分かる様だ。ただ、読みやすい形ではない。

% procstat -av | less
  PID      START        END PRT  RES PRES REF SHD FLAG  TP PATH
  345   0x400000   0x405000 r--    5   16   3   1 CN--- vn /usr/local/libexec/dconf-service
  345   0x405000   0x410000 r-x   11   16   3   1 CN--- vn /usr/local/libexec/dconf-service
  345   0x410000   0x411000 rw-    1    0   1   0 C---- vn /usr/local/libexec/dconf-service
  345   0x411000   0x412000 r--    1    2   2   0 ----- sw 
  345   0x412000   0x413000 rw-    1    2   2   0 ----- sw 
  345 0x20410000 0x20418000 r--    6   28 259 127 CN--- vn /libexec/ld-elf.so.1
  345 0x20418000 0x20430000 r-x   22   28 259 127 CN--- vn /libexec/ld-elf.so.1
  345 0x20430000 0x20431000 r--    1    0   1   0 C---- vn /libexec/ld-elf.so.1
  345 0x20431000 0x20432000 rw-    1    0   1   0 C---- vn /libexec/ld-elf.so.1
  345 0x20432000 0x20453000 rw-    3    3   1   0 ----- sw 
  345 0x20453000 0x20454000 r--    1    1  68   0 ----- dv 
  345 0x20454000 0x204b2000 r--   89  307  73  31 CN--- vn /usr/local/lib/libgio-2.0.so.0.6600.0
  345 0x204b2000 0x205bb000 r-x  209  307  73  31 CN--- vn /usr/local/lib/libgio-2.0.so.0.6600.0
  345 0x205bb000 0x205bc000 rw-    1    0   2   0 C---- vn /usr/local/lib/libgio-2.0.so.0.6600.0
  345 0x205bc000 0x205c0000 r--    4    0   2   0 C---- vn /usr/local/lib/libgio-2.0.so.0.6600.0
sw と表示されているものがスワップされた領域。START から END までがそのアドレス空間の様だ。
  345   0x411000   0x412000 r--    1    2   2   0 ----- sw 
  345   0x412000   0x413000 rw-    1    2   2   0 ----- sw 
つまり、この表示はプロセス番号 345 のメモリが、読み込み用と読み書き用の部分が 64k ずつスワップアウトされている様だ。十六進なので 1000 は 65536。