Je serveur linux virtuel (Fedora 17) avec 28GB RAM et d'échange de 2 Go. Le serveur exécute un DB MySQL qui est configuré pour utiliser la plupart de la RAM.
Après un certain temps de fonctionnement du serveur commence à utiliser swap pour échanger les pages unsued. C'est bien que mon swappiness est à défaut 60 et il est le comportement attendu.
La chose étrange est que le nombre en haut/meminfo ne correspond pas avec les informations de processus. C'est à dire. le serveur rapporte ces numéros:
/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
Si j'utilise le script à partir https://serverfault.com/a/423603/98204 il signale un nombre raisonnable (quelques mégaoctets par permutées bash'es, systemd, etc.) et une grande allocation de MySQL ( J'omis beaucoup de lignes de sortie):
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
Donc, si je reçois la sortie du script droit l'utilisation du swap total devrait être 449264K = ca. 440MB avec MySQL avec ca. 90% de l'échange.
La question est pourquoi cela diffère tant par le haut et le nombre meminfo? Est-il possible comment les informations d'échange " dump " pour voir ce qui est réellement en elle au lieu de sommer les usages d'échange de tous les processus?
Lors de l'analyse de la question, je suis venu avec des idées différentes mais tout semble se tromper:
La chose étrange est que l'utilisation du swap augmente lentement tandis que la sortie de somme à partir du script est à peu près la même chose. Dans les 3 derniers jours, l'échange utilisée est passé de 1100MB à 1230MB courant tandis que la somme est passée de 430MB à 449MB actuelle (environ).
Le serveur a suffisamment libre (pouvoir) RAM donc je pouvais désactiver le swap et rallumez-le. Ou je pourrais swappiness probablement mis à 0 pour l'échange ne s'utilisé que si le est aucune autre manière. Mais je voudrais résoudre le problème ou tout au moins savoir quelle est la cause de cela.
Fedora 18 et plus ont smem
dans les repos. Vous pouvez télécharger le python script et installer à partir de source .
Voici une sortie d'échantillon (un peu coupée et anonymisée) de ma machine:
# 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
La source fournit également smemcap
qui stockera toutes les données pertinentes afin que SMEM puisse être exécuté dessus ultérieurement.
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.