Debian Linux 3.16マシンでは、244 MBのスワップ領域が使用されています。
# free -h
total used free shared buffers cached
Mem: 94G 36G 57G 1.9G 3.8G 11G
-/+ buffers/cache: 20G 73G
Swap: 487M 244M 243M
これを見ると、244 MB使用されていることがわかりません。
# for file in /proc/*/status ; do grep VmSwap $file; done | sort -nk 2 | tail
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 0 kB
VmSwap: 4 kB
VmSwap: 12 kB
VmSwap: 16 kB
VmSwap: 36 kB
また、SwapCached
は34 MBしかありません。
# grep -i swap /proc/meminfo
SwapCached: 34584 kB
SwapTotal: 499708 kB
SwapFree: 249388 kB
カーネルのドキュメントはこれについて言っています:
SwapCached:一度スワップアウトされたメモリがスワップインされますが、スワップファイルにも含まれます(メモリが必要な場合は、スワップファイルにすでにあるため、再度スワップアウトする必要はありません。これにより、I/Oが節約されます)。
Linuxシステムでスワッププロセスを使用しているプロセスを確認するにはどうすればよいですか?より正確に:これらの244 MBのスワップのそれぞれがどこで消費されますか?
Linuxシステムでスワッププロセスを使用しているプロセスを確認するにはどうすればよいですか?
スワップ空間は、特定のプロセスで使用されるとは限りません。
より正確には、これらの244 MBのスワップのそれぞれがどこで消費されますか?
tmpfs
ベースのファイルシステムに格納されているファイルはそれらを使用している可能性があります(tmpfs
は最初にRAMをバックエンドとして使用しますが、RAMを無駄にしないために、アクティブに使用されていないスワップ領域ブロック)。
の出力を確認します。
df -ht tmpfs
/proc/PID/smaps
はマップに基づく拡張であり、プロセスの各マッピングのメモリ消費量を示します。各マッピングには、次のような一連の行があります。08048000-080bc000 r-xp 00000000 03:02 13130 /bin/bash Size: 1084 kB Rss: 892 kB Pss: 374 kB Shared_Clean: 892 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 892 kB Anonymous: 0 kB LazyFree: 0 kB AnonHugePages: 0 kB ShmemPmdMapped: 0 kB Shared_Hugetlb: 0 kB Private_Hugetlb: 0 kB Swap: 0 kB SwapPss: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mw me dw
試す
$ for proc in /proc/*; do cat $proc/smaps 2>/dev/null | awk '/Swap/{swap+=$2}END{print swap "\tKB\t'`readlink $proc/exe|awk '{print $1}' `'" }'; done | sort -n | awk '{total+=$1}/[0-9]/;END{print total "\tKB\tTotal"}'
0 KB /usr/bin/bash
0 KB /usr/bin/bash
0 KB /usr/bin/bash
0 KB /usr/bin/bash
0 KB /usr/bin/bash
0 KB /usr/bin/docker-containerd
0 KB /usr/bin/docker-containerd-shim
0 KB /usr/bin/docker-containerd-shim
0 KB /usr/bin/docker-proxy
0 KB /usr/bin/docker-proxy
0 KB /usr/bin/docker-proxy
0 KB /usr/bin/gawk
0 KB /usr/bin/readlink
0 KB /usr/bin/sleep
0 KB /usr/bin/sort
0 KB /usr/bin/ssh
0 KB /usr/bin/ssh
0 KB /usr/bin/ssh-agent
0 KB /usr/libexec/postfix/pickup
0 KB /usr/libexec/postfix/qmgr
0 KB /usr/sbin/atd
0 KB /usr/sbin/dnsmasq
0 KB /usr/sbin/dnsmasq
0 KB /usr/sbin/sedispatch
0 KB /usr/sbin/sshd
0 KB /usr/sbin/sshd
28 KB /usr/sbin/chronyd
32 KB /usr/sbin/audispd
84 KB /usr/sbin/avahi-daemon
88 KB /usr/lib/systemd/systemd-logind
100 KB /usr/bin/tail
104 KB /usr/sbin/crond
156 KB /usr/sbin/avahi-daemon
192 KB /usr/lib/systemd/systemd-journald
196 KB /usr/bin/bash
196 KB /usr/bin/dbus-launch
...
14872 KB /usr/bin/Xvnc
20048 KB /usr/lib64/firefox/firefox
40176 KB /usr/lib64/firefox/firefox
108848 KB /usr/sbin/mysqld
267144 KB Total
これは実際には、mysqlが最も多くのスワップを使用していることを示しています。
$ free -k
total used free shared buff/cache available
Mem: 1883740 1044212 112132 14320 727396 520304
Swap: 2097148 265784 1831364
free
の出力は、私の場合、あまりずれていないようです