Parece que tengo una pérdida de memoria mayor en mi sistema ubuntu actual
Después de informar extraños errores de memoria de Eclipse ( /ubuntu/148998/eclipse-constant-different-out-of-memory-errors ) Comencé a recibir mensajes de error de "Memoria insuficiente" en mi consola hoy, mientras haciendo tareas simples como escribir sudo -s
, o inclusofree -m
Escribir 'free -m' repetidamente me mostró cómo mi RAM sube rápidamente de 700M a 900M, creciendo hasta el tamaño de 2000M en unos segundos (después de liberar memoria con echo 3 > /proc/sys/vm/drop_caches
)
Eclipse no es la causa, eliminé completamente el proceso y el carnero todavía estaba subiendo. ¿Hay alguna forma de detectar de dónde viene la fuga? Ya ni siquiera puedo actualizar mi sistema, ya que apt-get update
falla (probablemente porque no tiene memoria)
Utilizando Ubuntu 11.10
fuente
Respuestas:
memprof
Fuente: Manual de Ubuntu
fuente
Primero, asegúrese de tener una carpeta temporal disponible que tenga suficiente espacio libre. Los siguientes comandos crean volcados que pueden tener varios GB de tamaño.
Puede crear una nueva carpeta tmp con el siguiente comando. Es posible que desee cambiar
/tmp
a un sistema de archivos diferente con suficiente espacioPasos para encontrar la fuga de memoria
Descubra el PID del proceso que causa la pérdida de memoria (también puede usar, por ejemplo,
htop
si está disponible) y guárdelo en una variable llamadapid
Dado que el PID está disponible en la variable
pid
, puede capturar el consumo de memoria utilizando/proc/$pid/smaps
y guardar en algún archivo comobeforeMemInc.txt
.Capture
/proc/$pid/smaps
nuevamente y guárdelo comoafterMemInc.txt
Encuentra la diferencia entre primero
smaps
y segundosmaps
, por ejemplo, conAnote el rango de direcciones donde aumentó la memoria, por ejemplo:
Use GDB para volcar la memoria en el proceso en ejecución u obtenga el coredump usando
Usé gdb en el proceso en ejecución para volcar la memoria en algún archivo.
Ahora, use el
strings
comando ohexdump -C
para imprimir elmemory.dump
De esto obtienes información legible que te ayuda a localizar esas cadenas en tu código fuente.
fuente
cat /proc/2882/smaps > /tmp/before.txt
el paso 2. ¿Qué hice mal?El truco drop_cache no liberará memoria, restablecerá el caché. Utiliza el comando ps si desea identificar qué procesos usan más memoria.
Por ejemplo, para monitorear la lista de los 15 principales usuarios de memoria residentes.
También puede verificar la reserva de memoria compartida, pero solo sabrá quién es el propietario de los segmentos.
Asignación de Pmap:
tenga en cuenta que las asignaciones reservadas son mucho más altas que las páginas asignadas reales (df 'usado')
Asignaciones del sistema V:
Editar : es necesario pasar
--sort -rss
aps
para obtener los procesos con el mayor uso de memoria, de lo contrario, la lista de procesos se ordena aumentando numéricamente y proporciona los procesos con el menor uso de memoria.fuente
Tengo una máquina más antigua que uso que escupe constantemente mensajes de pérdida de memoria:
Mi guión:
Lo nombró
cache.sh
Se puede ver que bajé a 374 MB, ejecuté
sync; sudo echo 3 > /proc/sys/vm/drop_caches
y recuperé 417 MB. Se puedecron
ejecutar cada 5 minutos o simplemente tener un terminal abierto y ejecutarlo cuando vea un rendimiento lento. Sí, necesito agregar memoria a la máquina ...fuente
memstat también es una buena herramienta que mostrará la cantidad de memoria utilizada por cada bloque, así como la cantidad de memoria utilizada por las bibliotecas cargadas. No es la mejor herramienta, pero vale la pena usarla para recopilar detalles y estadísticas.
memstat -w -p pid
Es un buen comando para usar.fuente
Tuve un problema similar pero con una solución muy extraña.
Por alguna razón desconocida, tenía un servidor de correo en la configuración y el funcionamiento de mi computadora portátil. No sé por qué lo tenía ... Sin embargo, cerré su servicio y resultó que ese software en mi computadora portátil estaba bajo un ataque ddos. Después de eso, todo fue normal.
fuente