Solo init, telnet y sh se están ejecutando, todavía hay pérdida de memoria. ¿Cómo encontrar la razón?

0

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?

Esquí
fuente
¿Cómo se manifiestan estos problemas de pérdida de memoria? ¿Recibe un mensaje de error cuando ejecuta un determinado programa? ¿Cuál es el programa y el mensaje de error exacto?
RedGrittyBrick
Estamos tratando de monitorear el uso de la memoria y generar alarma cuando el uso de la memoria aumenta más del 40%. Varios clientes han notado la alarma. Y ahora estamos investigando el motivo de la alarma. Después de 2 respuestas, parece que nuestro sw cuenta incorrectamente la memoria utilizada.
SKi
Todo tu razonamiento está mal. Todo el propósito de la memoria es ser utilizado. Usar la mayor parte de tu memoria es completamente normal. Las computadoras modernas usan la mayor cantidad de memoria posible para mejorar el rendimiento. La memoria no utilizada está completamente desperdiciada. No es como si usara solo la mitad de la memoria ahora, puede usar el doble mañana. Cualquier memoria que no uses hoy es un rendimiento perdido para siempre.
David Schwartz el
Sí, lo entiendo. El único propósito es detectar posibles fugas de memoria antes de que la fuga cause problemas. No vamos a soltar cachés o etc. en entornos de producción.
SKi

Respuestas:

3

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 .

geekosaur
fuente
La memoria inactiva es la primera en ser liberada. Si ya hubiera sido liberado, sería gratis, no inactivo. (En su caso, supongo que la mayor parte de la memoria inactiva es memoria que forzó a salir de la memoria caché al soltar la memoria caché de la página.)
David Schwartz
2

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 syncantes de la drop_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.

David Schwartz
fuente