28GB RAMおよび2GBのスワップを備えた仮想Linux(Fedora 17)サーバーがあります。サーバーは、ほとんどのRAMを使用するように設定されたMySQL DBを実行しています。
しばらくすると、サーバーはswapを使用して不要なページをスワップアウトし始めます。私のswappinessはデフォルトで60であり、それは予想される動作であるため、それは問題ありません。
奇妙なことに、top/meminfo内の数がプロセスからの情報と一致しない。つまりサーバーは次の数値を報告しています:
/proc/meminfo:
SwapCached: 24588 kB
SwapTotal: 2097148 kB
SwapFree: 865912 kB
top:
Mem: 28189800k total, 27583776k used, 606024k free, 163452k buffers
Swap: 2097148k total, 1231512k used, 865636k free, 6554356k cached
https://serverfault.com/a/423603/98204 のスクリプトを使用すると、妥当な数(bashやsystemdなどによってスワップされたMBが少ない)とMySQLからの1つの大きな割り当て(多くの出力行を省略しました):
892 [2442] qmgr -l -t fifo -u
896 [2412] /usr/libexec/postfix/master
904 [28382] mysql -u root
976 [27559] -bash
984 [27637] -bash
992 [27931] SCREEN
1000 [27932] /bin/bash
1192 [27558] sshd: admin@pts/0
1196 [27556] sshd: admin [priv]
1244 [1] /usr/lib/systemd/systemd
9444 [26626] /usr/bin/Perl /bin/innotop
413852 [31039] /usr/libexec/mysqld --basedir=/usr --datadir=/data/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/data/mysql/err --open-files-limit=8192 --pid-file=/data/mysql/pid --socket=/data/mysql/mysql.sock --port=3306
449264 Total Swap Used
したがって、スクリプトの出力が適切であれば、スワップの合計使用量は449264K = caになります。 mysqlでcaを使用して440MB。スワップの90%。
問題は、なぜこれがトップおよびmeminfoの数値と大きく異なるのかということです。すべてのプロセスからのスワップ使用量を合計する代わりに、スワップ情報を「ダンプ」して実際に何が含まれているかを確認する方法はありますか?
問題を分析したとき、私はさまざまなアイデアを思いつきましたが、それらはすべて間違っているようです:
奇妙なことに、スクリプトからの合計出力はほぼ同じであるにもかかわらず、スワップの使用率がゆっくりと増加しています。過去3日間で、使用されたスワップは1100MBから現在の1230MBに増加し、合計は430MBから現在の449MB(約)に増加しました。
サーバーには十分な空き容量がありますRAMなので、スワップをオフにしてからオンに戻すことができます。または、スワップを0に設定して、他に方法はありませんが、問題を解決するか、少なくともこの原因を特定したいと思います。
Fedora 18以降のリポジトリにはsmem
があります。 pythonスクリプトをダウンロードして source からインストールできます。
これが私のマシンからのサンプル出力です(少し切り取られ、匿名化されています)。
# smem -s swap -t -k -n
PID User Command Swap USS PSS RSS
20917 1001 bash 0 1.1M 1.1M 1.9M
28329 0 python /bin/smem -s swap -t 0 6.3M 6.5M 7.4M
2719 1001 gnome-pty-helper 16.0K 72.0K 73.0K 516.0K
619 0 @sbin/mdadm --monitor --sca 28.0K 72.0K 73.0K 248.0K
[big snip]
32079 42 gnome-Shell --mode=gdm 41.9M 1.9M 2.0M 5.0M
32403 1001 /opt/google/chrome/chrome - 43.1M 118.5M 119.4M 132.3M
4844 1002 /opt/google/chrome/chrome 48.1M 38.1M 41.9M 51.9M
5411 1002 /opt/google/chrome/chrome - 54.6M 33.4M 33.5M 36.8M
5624 1002 /opt/google/chrome/chrome - 72.4M 54.9M 55.5M 65.7M
24328 1002 /opt/Adobe/Reader9/Reader/i 77.5M 1.9M 2.0M 5.2M
4921 1002 /opt/google/chrome/chrome - 147.2M 258.4M 259.4M 272.0M
-------------------------------------------------------------------------------
214 14 1.1G 1.1G 1.2G 1.7G
ソースは、関連するすべてのデータを格納するsmemcap
も提供するため、後でsmemを実行できます。
To capture memory statistics on resource-constrained systems, the the smem source includes a utility named smemcap. smemcap captures all /proc entries required by smem and outputs them as an uncompressed .tar file to STDOUT. smem can analyze the output using the --source option. smemcap is small and does not require Python.
私のシステムは正しいスワップの使用法を示しているので、別のマシンでこのスクリプトを確認する必要があります。
# Your_script.sh
111280 Total Swap Used
# free
Swap: 33551716 120368 33431348
非常に近い111280〜= 120368。
また、次のスクリプトもご覧ください。
/ proc/*のprocの場合; cat $ proc/smaps 2>/dev/null | awk '/ Swap/{swap + = $ 2} END {print swap "\ t'
readlink $proc/exe
'"}';完了|並べ替え-n | awk '{total + = $ 1}/[0-9] /; END {print total"\tTotal "}'
このスレッドから:
https://unix.stackexchange.com/questions/71714/linux-total-swap-used-swap-used-by-processes