pipe: muitos arquivos abertos tornam todo o sistema operacional completamente inútil

pipe: muitos arquivos abertos tornam todo o sistema operacional completamente inútil

Estou executando o Ubuntu 12.04 e estou tendo um grande problema. Duas vezes diferentes hoje, uma das minhas sessões abertas do terminal gnome travou e imprimiu o erro

pipe: too many open files

Sei que isso provavelmente está relacionado ao meu limite de usuários mostrado ulimit -n, que, aliás, é 1024. O problema é que, quando isso acontecer, posso forçar o encerramento do terminal incorreto, mas não consigo abrir nada que gere um novo PID. Por exemplo, não consigo xkillmatar nada, não consigo abrir outro terminal para olhar para cima, não consigo executar o shutdown, não consigo acessar apenas um console e fazer login. Clicar em qualquer link que deveria abrir uma janela X gera uma nova janela que diz:

There was an error launching the application.
Details: Failed to fork (Cannot allocate memory)

Este é o mesmo erro que recebo quando tento fazer login após pressionar Ctrl+Alt+F1. Como fico completamente preso neste ponto, sou forçado a inicializar minha máquina. Isso está tornando extremamente difícil a depuração.

Há algo que eu possa fazer para recuperar quando esse erro for encontrado? Como devo proceder para rastrear o erro?

Como nota final, não tenho executado um número ridículo de coisas: dois terminais, um com uma sessão byobu com 2 abas, um com uma sessão python; uma única instância do emacs, um único google chrome e vários nós ROS (sistema operacional de robô).

EDITAR

Pressionar Ctrl+Alt+Backspace para reiniciar meu gerenciador de exibição apenas me permitiu fazer login novamente e começar a abrir um terminal. O uso psrevelou que ainda havia muitos processos em execução que estavam em execução com o travamento ocorrido. No mínimo, isso me permite reiniciar minha máquina a partir do software. Como devo proceder para determinar o que está causando esse problema?

EDITAR 2

Acabei de abrir dois terminais que reservei e esperei que o travamento acontecesse. Assim que isso aconteceu, consegui capturar uma captura de tela da saída do arquivo top. Não sei se o resultado será particularmente útil, mas anexei-o. A única coisa particularmente estranha que notei foi que havia 5 processos zumbis.insira a descrição da imagem aqui

Responder1

Parece que você tem um vazamento de recursos em algum lugar. Você pode executar 'lsof' para obter uma lista de todos os arquivos abertos (obviamente em algum momento antes de seu sistema morrer de fome). Compare a lista com os pids ativos e você (talvez) encontrará o culpado.

Eu também sugeriria alterar o limite de arquivos abertos em /etc/security/limits.conf (ou talvez em outro lugar? Faz um tempo que não sigo o Ubuntu e parece haver alguma especulação de que o limit.conf não é carregado por padrão). Se você realmente tiver um vazamento de recursos, isso apenas prolongará o problema. Procure um vazamento primeiro.

Responder2

A mensagem de muitos arquivos abertos provavelmente é específica do processo e não é um problema de todo o sistema. O "não é possível alocar memória" pode ser específico do processo, mas provavelmente abrange todo o sistema.

Como cydonian.monk apontou, há algum tipo de vazamento de recursos. O culpado mais provável é um processo descontrolado ou malcomportado que está gerando filhos repetidamente ou tem um bug ou vazamento de memória que está causando a abertura repetida de arquivos e/ou alocação de memória a ponto de o sistema ficar sem memória.

Eu me concentraria no que você estava fazendo na janela do terminal gnome que primeiro recebeu a mensagem de muitos arquivos abertos. Determine o que estava sendo executado naquela janela e concentre-se em seu comportamento. Executar ps é cron a cada poucos minutos ou executar top -be salvar a saída em um arquivo pode dar uma ideia do que estava acontecendo quando ocorrer a próxima falha.

A saída principal que você forneceu parece um sistema em execução normal.

Responder3

Você já tentou aumentar o limite superior para o número de arquivos?

O que você precisa fazer é adicionar essas linhas em /etc/security/limits.conf

* soft nofile 6000
* hard nofile 6000

informação relacionada