
Estoy ejecutando Ubuntu 12.04 y tengo un problema importante. Dos veces distintas hoy, una de mis sesiones abiertas de gnome-terminal se bloqueó e imprimió el error
pipe: too many open files
Me doy cuenta de que probablemente esté relacionado con el límite de usuarios que se muestra ulimit -n
, que, por cierto, es 1024. El problema es que una vez que esto sucede, puedo forzar el cierre del terminal infractor, pero luego no puedo abrir nada que genere un nuevo PID. Por ejemplo, no puedo usar xkill
para eliminar nada, no puedo abrir otra terminal para mirar en la parte superior, no puedo ejecutar el apagado, no puedo acceder solo a una consola e iniciar sesión. Al hacer clic en cualquier enlace que debería abrir una ventana X, aparece una nueva ventana que dice:
There was an error launching the application.
Details: Failed to fork (Cannot allocate memory)
Este es el mismo error que recibo cuando intento iniciar sesión después de presionar Ctrl+Alt+F1. Debido a que me quedo completamente atascado en este punto, me veo obligado a reiniciar mi máquina. Esto hace que sea extremadamente difícil depurar.
¿Hay algo que pueda hacer para recuperarme una vez que se encuentre este error? ¿Cómo debo hacer para localizar el error?
Como nota final, no he estado ejecutando una cantidad ridícula de cosas: dos terminales, uno con una sesión de byobu con 2 pestañas, uno con una sesión de python; una única instancia de emacs, un único google chrome y varios nodos ROS (sistema operativo de robot).
EDITAR
Presionar Ctrl+Alt+Retroceso para reiniciar mi administrador de pantalla me permitió volver a iniciar sesión y comenzar a abrir una terminal. El uso ps
reveló que todavía había muchos procesos en ejecución que se habían estado ejecutando cuando ocurrió el bloqueo. Como mínimo, esto me permite reiniciar mi máquina desde el software. ¿Cómo debo proceder para determinar qué está causando este problema?
EDITAR 2
Simplemente abrí dos terminales que dejé a un lado y esperé a que ocurriera el bloqueo. Una vez que sucedió, pude capturar una captura de pantalla del resultado de top
. No sé si el resultado será particularmente útil, pero lo adjunto. Lo único que noté que fue particularmente extraño fue que había 5 procesos zombies.
Respuesta1
Parecería que tienes una fuga de recursos en alguna parte. Puede ejecutar 'lsof' para obtener una lista de todos los archivos abiertos (obviamente en algún momento antes de que su sistema muera de hambre). Compare la lista con los pids activos y (tal vez) encuentre al culpable.
También sugeriría cambiar el límite de archivos abiertos en /etc/security/limits.conf (¿o tal vez en otro lugar? No he seguido Ubuntu por un tiempo y parece haber cierta especulación de que limits.conf no se carga por defecto). Si realmente tiene una fuga de recursos, eso sólo prolongará el problema. Primero busque una fuga.
Respuesta2
El mensaje de demasiados archivos abiertos probablemente sea específico del proceso, no un problema de todo el sistema. El mensaje "no se puede asignar memoria" podría ser específico del proceso, pero probablemente abarque todo el sistema.
Como señaló cydonian.monk, hay algún tipo de fuga de recursos. El culpable más probable es un proceso fuera de control o que se comporta mal y que genera niños repetidamente, o que tiene un error o una pérdida de memoria que hace que se abran archivos repetidamente y/o se asigne memoria hasta el punto de que el sistema se quede sin memoria.
Me centraría en lo que estabas haciendo en la ventana del terminal de gnome que recibió por primera vez el mensaje de demasiados archivos abiertos. Determine qué se estaba ejecutando desde/en esa ventana y concéntrese en su comportamiento. Ejecutar ps is cron cada pocos minutos o ejecutar top -b
y guardar el resultado en un archivo puede darle una idea de lo que sucederá cuando ocurra el próximo bloqueo.
El resultado superior que proporcionó parece un sistema que se ejecuta normalmente.
Respuesta3
¿Ha intentado aumentar el límite superior de cantidad de archivos?
Lo que debes hacer es agregar estas líneas en /etc/security/limits.conf
* soft nofile 6000
* hard nofile 6000