28GB RAMと2GBスワップの仮想Linux(Fedora 17)サーバーがあります。サーバーは、ほとんどのRAMを使用するように設定されたMySQL DBを実行しています。
しばらくすると、サーバーはスワップを使用して未使用のページをスワップアウトし始めます。私の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
/server//a/423603/98204のスクリプトを使用すると、妥当な数(bash'es、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になります。caを使用したmysqlで440MB。スワップの90%。
問題は、これがtopおよびmeminfoの数値と大きく異なる理由です。すべてのプロセスのスワップ使用量を合計する代わりに、スワップ情報を「ダンプ」して実際の内容を確認する方法はありますか?
問題を分析するとき、私はさまざまなアイデアを思いつきましたが、それらはすべて間違っているようです:
- スクリプト出力はKBではありません。512または4KB単位であっても一致しません。実際、比率(1200:440)は約3:1で、「奇妙な」数です。
- /server//a/477664/98204に記載されているように、プロセス間で何らかの形で共有されるスワップのページがいくつかあります。これが当てはまる場合、このように使用されている実際のメモリ数をどのように見つけることができますか?つまり、cca 800MBの差をつける必要があるということです。そして、それはこのシナリオでは正しく聞こえません。
- すでに終了したプロセスによって使用されるスワップには、いくつかの「古い」ページがあります。この「解放可能な」スワップがいくらであるかを知ることができたとしても、私は気にしません。
- メモリにスワップバックされたスワップ内のページがあり、RAMで変更されず/server//a/100636/98204に記載されているように再度スワップアウトする必要がある場合に備えてスワップされてい ます。ただし、SwapCached値は24MBのみです。
奇妙なことは、スクリプトからの合計出力がほぼ同じであるのに、スワップの使用が徐々に増加していることです。過去3日間で、使用されたスワップは1100MBから現在の1230MBに増加し、合計は430MBから現在の449MB(約)に増加しました。
サーバーには十分な空き(使用可能な)RAMがあるため、スワップをオフにしてからオンに戻すことができます。または、swappinessを0に設定して、他に方法がない場合にのみスワップが使用されるようにすることもできます。しかし、私は問題を解決するか、少なくともこの原因を見つけたいと思います。