View previous topic :: View next topic |
Author |
Message |
pums974 Tux's lil' helper
Joined: 27 Feb 2010 Posts: 78
|
Posted: Sun Feb 26, 2012 3:38 pm Post subject: [Memoire] Pb de swap et de cache (bug 403449) |
|
|
Bonjour,
J'ai remarquer que mon pc utilisait le swap sans raison : free -h
total used free shared buffers cached
Mem: 3,9G 689M 3,2G 0B 31M 348M
-/+ buffers/cache: 310M 3,6G
Swap: 5,0G 321M 4,7G
Alors j'ai voulu le vider : swapoff -av
swapoff sur /dev/sda2
swapoff: /dev/sda2 : échec de swapoff: Ne peut allouer de la mémoire
Je ne comprend pas pourquoi il refuse.
je rajouterais que je n'arrive pas a vider le cache avec : echo "1" > /proc/sys/vm/drop_caches
Je pense que c'est lié à d'autres problèmes lié à la gestion de la mémoire chez moi : https://bugs.gentoo.org/show_bug.cgi?id=403449
Est-ce que ca parle à quelqu'un ?
Last edited by pums974 on Mon Feb 27, 2012 8:59 pm; edited 1 time in total |
|
Back to top |
|
|
xaviermiller Bodhisattva
Joined: 23 Jul 2004 Posts: 8708 Location: ~Brussels - Belgique
|
Posted: Mon Feb 27, 2012 2:05 pm Post subject: |
|
|
Bonjour,
Pourrais-tu mettre le titre de ton message en conformité avec le forum ?
Merci d'avance ! _________________ Kind regards,
Xavier Miller |
|
Back to top |
|
|
pums974 Tux's lil' helper
Joined: 27 Feb 2010 Posts: 78
|
Posted: Mon Feb 27, 2012 9:02 pm Post subject: |
|
|
Bonjour,
Au temps pour moi, désolé de ne pas l'avoir fait dés le début.
C'est corrigé, mais je ne suis pas trop sur de ma description, si tu pense à quelque chose de plus clair.... |
|
Back to top |
|
|
xaviermiller Bodhisattva
Joined: 23 Jul 2004 Posts: 8708 Location: ~Brussels - Belgique
|
Posted: Mon Feb 27, 2012 9:07 pm Post subject: |
|
|
Merci pour le titre
Pour le reste, je ne vois pas trop, je laisse la main à l'équipe _________________ Kind regards,
Xavier Miller |
|
Back to top |
|
|
pums974 Tux's lil' helper
Joined: 27 Feb 2010 Posts: 78
|
Posted: Mon Feb 27, 2012 9:31 pm Post subject: |
|
|
Déjà je ne suis plus sur,
quand je fais echo "1" > /proc/sys/vm/drop_caches
je suis bien censé me retrouver avec 0 de cache affiché dans free ?
et j'ai fais un test de plus, j'ai rajouter un swap sdd2 et j'ai pu désactiver mon swap sda2, et ce instantanément, sans transfert de données. Mais sans pouvoir desactiver sdd2 ensuite.
Donc :
1 - Je ne comprend pas ce que sont les données qui sont dans mon swap, mais qu'il ne transfert pas dans le nouveau swap...
2 - Mais pourquoi refuse-t'il de vivre sans swap alors qu'il a toute la place dont il a besoin en mémoire. |
|
Back to top |
|
|
xaviermiller Bodhisattva
Joined: 23 Jul 2004 Posts: 8708 Location: ~Brussels - Belgique
|
Posted: Tue Feb 28, 2012 8:11 am Post subject: |
|
|
Si le swap ne se vide pas, c'est qu'une application a de la mémoire en swap...
Ferme toutes tes applications avant de dropper ton swap. _________________ Kind regards,
Xavier Miller |
|
Back to top |
|
|
pums974 Tux's lil' helper
Joined: 27 Feb 2010 Posts: 78
|
Posted: Tue Feb 28, 2012 9:15 pm Post subject: |
|
|
A ce moment là je n'avais quasiment aucune application ouverte, si ce n'est un terminal et gnome...
D'habitude il me semble que je peut vider mon swap à peu près à n'importe quel moment...
Comment je peux savoir quel application utilise le swap ? |
|
Back to top |
|
|
ghoti Advocate
Joined: 30 Dec 2002 Posts: 3634 Location: Belgium
|
Posted: Tue Feb 28, 2012 10:17 pm Post subject: |
|
|
Tu trouveras sur cette page une série de raisons qui peuvent pousser le kernel à recourir à la SWAP alors qu'il y a de la RAM disponible... |
|
Back to top |
|
|
pums974 Tux's lil' helper
Joined: 27 Feb 2010 Posts: 78
|
Posted: Tue Jun 12, 2012 5:33 pm Post subject: |
|
|
Bonjour,
Désolé de relancer le sujet, mais je ne comprend toujours pas.
Je fais, dans l'ordre
# swapon /dev/sda2
*utilisation du PC *
# free
total used free shared buffers cached
Mem: 4045484 3545152 500332 0 157632 1473384
-/+ buffers/cache: 1914136 2131348
Swap: 5245216 278700 4966516
# sync
# sysctl -w vm.drop_caches=3
# sysctl vm.swappiness=0
# free -m
total used free shared buffers cached
Mem: 3950 2347 1603 0 26 599
-/+ buffers/cache: 1721 2229
Swap: 5122 269 4852
# swapon /dev/sda3
# swapoff /dev/sda2
# free -m
total used free shared buffers cached
Mem: 3950 2642 1307 0 60 799
-/+ buffers/cache: 1783 2167
Swap: 10235 0 10235
# swapoff -av
swapoff sur /dev/sda3
swapoff: /dev/sda3 : échec de swapoff: Ne peut allouer de la mémoire
Pourquoi veut-il allouer de la mémoire puisqu'il utilise 0 de swap ??? |
|
Back to top |
|
|
DuF Advocate
Joined: 09 Dec 2002 Posts: 2687 Location: Paris
|
Posted: Tue Jun 12, 2012 9:35 pm Post subject: |
|
|
Bonjour,
Alors pour moi il y a plusieurs sujets :
- ton système swap-t-il ? D'après moi on n'en sait rien, tout du moins nous n'avons pas les informations pour le savoir. J'y reviens après
- Les commandes swapon et swapoff servent seulement à proposer une zone mémoire supplémentaire de type pagination/swap. Il s'agit en général de disques/partitions que l'on dédie à cette activité. [EDIT]Je suis allé un peu vite là. Je comprends bien que l'enchainement d'un swapoff et d'un swapon c'est pour forcer le système à copier cette zone mémoire en ram et repartir avec un swap vide, je ne le remets pas en cause, mais ce n'est pas le but de ces fonctions. C'est pour ça que je fais ce rappel et recentre le sujet sur l'usage attendu afin d'éviter tout contournement, l'objectif étant de comprendre ce qui se passe et d'éviter toute solution curative qui ne serait pas préventive.
- La succesion de commandes swapon/swapoff ne fait que perturber le système sur les zones de pagination/swap qu'il a a disposition. Sachant qu'il peut réserver de la mémoire (en swap) sans l'utiliser réellement (par des écritures disques en l'occurence) il peut échouer sur un swapoff s'il venait de faire une réservation mémoire dans cette zone.
- Le fait qu'il reste de la mémoire 'Free' n'est pas forcément un indicateur de swap ou pas, comme l'indique Ghoti en suivant son lien. En effet un exemple simple (qui n'est pas forcément ton cas), toute la mémoire est prise, un traitement spécifique a besoin à un instant T de mémoire, le système va le mettre en swap ou mettre un swap un autre segment mémoire qu'il juge vieux mais qu'il ne peut libérer. Pour une raison X ou Y tu libères de la mémoire qui était dans la zone 'free' le système ne va pas forcément libérer celui qui a été affecté au swap s'il n'est sollicité par personne. Et dans ce cas la commande free indiquera de la mémoire libre et du swap utilisé, mais peut être que c'est en raison d'une configuration particulière passée. Dans le même genre, la commande suivante permet de voir qu'elle est réellement à un instant T la mémoire réellement utilisée, pas seulement celle réservée, mais celle dites "active", à comparer avec le "free -m" (le cat /proc/meminfo le donne aussi) :
Code: | genduf ~ # vmstat -s -S M | grep mem
3793 M total memory
2140 M used memory
1169 M active memory
613 M inactive memory
1652 M free memory
223 M buffer memory
genduf ~ # free -m
total used free shared buffers cached
Mem: 3793 2127 1666 0 223 1194
-/+ buffers/cache: 709 3084
Swap: 1035 0 1035
|
Maintenant le point important dans tout ça, de mon point de vue en tout cas :
- Dédier un espace (ou pas) de swap en affectant une partition par exemple, chez toi cela pourrait être /dev/sda3, afin de creuser le sujet voir identifier un coupable à une consommation de mémoire swap.
- Mettre en place une métrologie permettant d'identifier qui swap => Pour ça il existe différents outils, le plus simple et facile à utiliser est vmstat. Il suffit de le lancer dans un terminal/console en indiquant un intervalle de prise de mesure (en secondes).
En général on obtient une sortie du type :
Code: | procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 1772024 226012 1155908 0 0 86 106 58 322 3 2 93 2
0 0 0 1772148 226020 1156184 0 0 128 36 152 278 1 2 97 0
0 0 0 1764336 226020 1164652 0 0 0 0 126 250 1 2 97 0
0 0 0 1760616 226028 1167348 0 0 128 102 233 1115 2 2 96 0
0 0 0 1770288 226028 1156808 0 0 128 0 242 1077 2 2 96 0
0 0 0 1769800 226028 1156712 0 0 0 0 304 1493 3 2 95 0
0 0 0 1769188 226040 1157248 0 0 256 42 242 1300 2 2 96 0
0 0 0 1768800 226040 1157288 0 0 0 0 312 1657 2 2 96 0
0 0 0 1768676 226048 1157536 0 0 128 60 286 1451 2 2 96 0
0 0 0 1768428 226048 1157984 0 0 128 0 278 1465 2 2 96 0
1 0 0 1767064 226056 1158048 0 0 128 100 325 1567 3 2 95 0
0 0 0 1766420 226056 1158056 0 0 0 4 335 1654 2 2 96 0
0 0 0 1766296 226056 1158312 0 0 128 0 225 1119 2 2 96 0
0 0 0 1765676 226068 1158592 0 0 128 38 284 1395 2 2 96 0
0 0 0 1765552 226068 1158576 0 0 0 0 364 1862 2 3 95 0
0 0 0 1765056 226068 1159124 0 0 256 0 232 1253 2 2 96 0
1 0 0 1764560 226076 1159088 0 0 0 22 306 1644 3 2 95 0
1 0 0 1764560 226076 1159344 0 0 128 0 344 1655 3 2 95 0
0 0 0 1761956 226084 1159532 0 0 94 104 315 1561 2 3 95 0
0 0 0 1761212 226084 1159484 0 0 0 0 325 1640 2 3 95 0
1 0 0 1760468 226084 1159460 0 0 0 0 376 1845 2 3 95 0
0 0 0 1760344 226096 1159532 0 0 0 40 356 1783 3 2 95 0
0 0 0 1774604 226108 1171756 0 0 120 0 310 1264 2 3 95 0
|
Les 2 colonnes qui vont nous intéresser sont 'si' et 'so' pour swapin et swapout, en gros les pages qu'il écrit et qu'il sort de l'espace swap. Attention je crois que le swapout correspond à ce qui est écrit en swap, à vérifier Donc si quand tu boot ton swap est à 0 et qu'avec cette commande tu vois de l'activité si/so et que ton swap se remplit, alors effectivement tu as un élément qui génère du swap.
L'étape suivante est d'identifier pourquoi à un moment donné il y a ce swap ou qui se retrouve en swap.
Pour ça il y a plusieurs possibilités mais ça devient plus compliqué car faut d'abord déterminer ce qu'on cherche. Mais c'est à coup de top, pmap etc. Voir si c'est un noyau récent, utiliser 'perf' ( http://perf.wiki.kernel.org/ ) mais pour l'instant je n'ai pas encore eu l'occastion de pratiquer ce qui est bien dommage car j'ai toujours les outils solaris DTT bien sympathiques.
Pour résumer, la première question est : ton système génère-t-il du swap ? |
|
Back to top |
|
|
|