Nous avons un problème avec les boîtes Linux intégrées. Certaines boîtes ont une fuite de mémoire.
Aucun des processus ne contient pas la mémoire perdue.
Après avoir éliminé tous les processus possibles, la fuite existe toujours. En regardant dans / proc / meminfo, il semble que la mémoire perdue se trouve dans la mémoire inactive:
~ # echo 1 > /proc/sys/vm/drop_caches ; cat /proc/meminfo
MemTotal: 126744 kB
MemFree: 107684 kB
Buffers: 0 kB
Cached: 1160 kB
SwapCached: 0 kB
Active: 1204 kB
Inactive: 12532 kB
SwapTotal: 0 kB
SwapFree: 0 kB
...
~ # ps
PID USER VSZ STAT COMMAND
1 root 2748 S init
2 root 0 SW< [kthreadd]
3 root 0 SW< [ksoftirqd/0]
4 root 0 SW< [events/0]
5 root 0 SW< [khelper]
31 root 0 SW< [kblockd/0]
42 root 0 SW< [khubd]
48 root 0 SW< [kmmcd]
82 root 0 SW [pdflush]
83 root 0 SW [pdflush]
84 root 0 SW< [kswapd0]
85 root 0 SW< [aio/0]
170 root 0 SW< [rpciod/0]
176 root 0 SW< [mmcqd]
1346 root 2756 S telnetd -l /bin/login
1347 root 2856 S -sh
3737 root 2856 R ps
~ #
Les disques RAM ne sont pas utilisés. La version Linux est 2.6.25.9.
Est-il possible de trouver une raison pour laquelle la mémoire inactive augmente tout le temps? Est-il possible de vider ou de supprimer la mémoire inactive?
Réponses:
La mémoire inactive n'est pas un problème, certainement pas une "fuite"; ce sont des pages de mémoire qui ont généralement été utilisées pour mettre en mémoire tampon des fichiers ou des exécutables qui ne sont pas en cours d'exécution et qui sont conservées pour une éventuelle utilisation. Si quelque chose a besoin de ces données (lire le même fichier ou exécuter le même programme), elles seront réutilisées sans que le disque ne soit touché à nouveau. Si quelque chose d'autre a besoin des pages, leur état inactif signifie qu'elles seront utilisées en cas de besoin.
En d'autres termes, considérez la mémoire libre comme une mémoire qui n'a jamais été allouée. La mémoire inactive est la mémoire allouée et libérée .
la source
Il n'y a aucune preuve de fuite d'aucune sorte dans les données que vous avez publiées. La mémoire est correctement suivie comme inactive. Si vous effectuez une opération
sync
antérieure àdrop_caches
, vous ne verrez probablement pas autant de mémoire inactive, mais vous la créez en forçant des pages à sortir du cache. S'ils ne peuvent pas être libérés (disons qu'ils sont sales), ils deviennent inactifs.Vous pouvez forcer la synchronisation plus rapide de la mémoire sale et inactive en cours d'exécution
sync
, mais je ne peux imaginer aucune raison possible de le faire. Vous ne pouvez pas forcer la mémoire propre et inactive à être libérée, et je ne peux pas imaginer la raison pour laquelle vous voudriez. Le système peut déjà le supprimer et il est déjà le premier à être utilisé lorsque le pool de mémoire disponible est épuisé. Pourquoi voulez-vous qu'il soit plus libre?Si vous ne souhaitez pas que le système utilise la mémoire, sortez-la de la machine et déposez-la sur votre bureau. En ce moment, vous ralentissez le système en le forçant à réduire la taille des caches et à vider les pages encrassées plus rapidement qu'il ne le souhaite, ce qui entraîne des tonnes d'E / S inutiles. Laissez-le tranquille et laissez-le faire son travail.
la source