web-dev-qa-db-ja.com

スワップスペースは何を使用していますか?

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のスワップのそれぞれがどこで消費されますか?

4
Totor

Linuxシステムでスワッププロセスを使用しているプロセスを確認するにはどうすればよいですか?

スワップ空間は、特定のプロセスで使用されるとは限りません。

より正確には、これらの244 MBのスワップのそれぞれがどこで消費されますか?

tmpfsベースのファイルシステムに格納されているファイルはそれらを使用している可能性があります(tmpfsは最初にRAMをバックエンドとして使用しますが、RAMを無駄にしないために、アクティブに使用されていないスワップ領域ブロック)。

の出力を確認します。

df -ht tmpfs
2
jlliagre

/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の出力は、私の場合、あまりずれていないようです

3
Ezwig