Tenemos problemas con las cajas de Linux incrustadas. Algunas cajas tienen una pérdida de memoria.
Ninguno de los procesos no contiene la memoria filtrada.
Después de matar todos los procesos posibles, la fuga todavía existe. Al mirar desde / proc / meminfo, parece que la memoria perdida está bajo Memoria inactiva:
~ # 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
~ #
Los discos de carnero no están en uso. La versión de Linux es 2.6.25.9.
¿Hay alguna forma de encontrar la razón por la cual la memoria inactiva aumenta todo el tiempo? ¿Es posible enjuagar o soltar la memoria inactiva?
Respuestas:
La memoria inactiva no es un problema, ciertamente no es una "fuga"; se trata de páginas de memoria que normalmente se han utilizado para almacenar en búfer archivos o ejecutables que no se están ejecutando actualmente, y se mantienen para su posible reutilización. Si algo necesita los datos que contiene (leer el mismo archivo o ejecutar el mismo programa), se reutilizarán sin volver a presionar el disco; si algo más necesita las páginas, sin embargo, su estado inactivo significa que se usarán cuando sea necesario.
Dicho de otra manera, piense en la memoria libre como memoria que nunca ha sido asignada; La memoria inactiva es la memoria que ha sido asignada y liberada .
fuente
No hay evidencia de una fuga de ningún tipo en los datos que publicó. La memoria se rastrea correctamente como inactiva. Si hace una
sync
antes de ladrop_caches
, probablemente no verá tanta memoria inactiva, pero la está creando forzando a las páginas a salir de la caché. Si no pueden ser liberados (digamos que están sucios) se vuelven inactivos.Puede forzar que la memoria sucia e inactiva se sincronice más rápido ejecutando
sync
, pero no puedo imaginar ninguna razón posible para hacerlo. No puede forzar la liberación de la memoria limpia e inactiva, ni puedo imaginar ninguna razón por la que desee. El sistema ya puede descartarlo y ya es el primero en usar cuando el grupo de memoria libre se agota. ¿Por qué quieres que sea más libre?Si no desea que el sistema use la memoria, sáquela de la máquina y siéntela en su escritorio. Porque en este momento, solo está haciendo que el sistema se ralentice al forzarlo a reducir el tamaño de las cachés y limpiar las páginas sucias más rápido de lo que desearía, lo que causa toneladas de E / S innecesarias. Solo déjalo en paz y deja que haga su trabajo.
fuente