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 updatefalla (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
/tmpa 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,
htopsi está disponible) y guárdelo en una variable llamadapidDado que el PID está disponible en la variable
pid, puede capturar el consumo de memoria utilizando/proc/$pid/smapsy guardar en algún archivo comobeforeMemInc.txt.Capture
/proc/$pid/smapsnuevamente y guárdelo comoafterMemInc.txtEncuentra la diferencia entre primero
smapsy 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
stringscomando ohexdump -Cpara imprimir elmemory.dumpDe esto obtienes información legible que te ayuda a localizar esas cadenas en tu código fuente.
fuente
cat /proc/2882/smaps > /tmp/before.txtel 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 -rssapspara 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.shSe puede ver que bajé a 374 MB, ejecuté
sync; sudo echo 3 > /proc/sys/vm/drop_cachesy recuperé 417 MB. Se puedecronejecutar 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 pidEs 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