Autor Tópico: "Too many open files" erro -> ulimit -n 65536 não resolve  (Lida 3897 vezes)

Offline evefuji

  • Usuário Ubuntu
  • *
  • Mensagens: 12
    • Ver perfil
"Too many open files" erro -> ulimit -n 65536 não resolve
« Online: 19 de Outubro de 2011, 19:50 »
Olá,

Depois de muito procurar e quebrar a cabeça, infelizmente não encontrei solução para esse problema (encontrei em outros fóruns problemas muito semelhantes, mas nenhuma solução).

Tenho uma aplicação no glassfish que necessita abrir muitos arquivos, entretanto, me sai sempre o erro "Too many open files". Mudei o parâmetro do ulimit -n, tanto através do ulimit quanto através do arquivo /etc/security/limits.conf, mas não me solucionou o problema.

Adicionei ao limits.conf

Código: [Selecionar]
glassfish soft nofile 65536
 glassfish hard nofile 65536

E depois de reiniciar, o ulimit -n me trouxe 65536.

Entretanto, rodando o comando abaixo:

Código: [Selecionar]
for pid in `pidof java`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done

Tenho a seguinte resposta:


Código: [Selecionar]
Limit                     Soft Limit           Hard Limit           Units
Max open files            1024                 1024                 files
Currently open files: 971

/usr/lib/jvm/java-6-sun/bin/java-jar/opt/glassfishv3/glassfish/bin/../modules/admin-cli.jarstart-domaindomain1
Limit                     Soft Limit           Hard Limit           Units
Max open files            1024                 1024                 files
Currently open files: 55

Não sei mais o que posso fazer para solucionar isso, alguém tem alguma ideia?
« Última modificação: 22 de Outubro de 2011, 13:52 por evefuji »

Offline evefuji

  • Usuário Ubuntu
  • *
  • Mensagens: 12
    • Ver perfil
Re: "Too many open files" erro -> ulimit -n 65536 não resolve
« Resposta #1 Online: 19 de Outubro de 2011, 20:03 »
Faltou dizer uma coisa, se eu reinicio o glassfish como serviço durante o boot, é que o limite está 1024. Se eu inicio depois do boot (manualmente), ele fica com o limite do ulimit. Como posso fazer para ele iniciar como serviço durante o boot com esse limite, ou esperar o limite estar atualizado para inicializar?

Offline zekkerj

  • Usuário Ubuntu
  • *
  • Mensagens: 19.637
  • Gratidão gera gratidão, lamúria gera lamúria...
    • Ver perfil
    • Blog do Zekke
Re: "Too many open files" erro -> ulimit -n 65536 não resolve
« Resposta #2 Online: 19 de Outubro de 2011, 21:56 »
evefuji, esse limite deve ter sido hardcoded no script de inicialização. Se vc se vira com shell script, vale dar uma olhada no código.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Offline evefuji

  • Usuário Ubuntu
  • *
  • Mensagens: 12
    • Ver perfil
Re: "Too many open files" erro -> ulimit -n 65536 não resolve
« Resposta #3 Online: 22 de Outubro de 2011, 13:51 »
evefuji, esse limite deve ter sido hardcoded no script de inicialização. Se vc se vira com shell script, vale dar uma olhada no código.
não consegui encontrar isso nos scripts de inicialização, mas no script de inicialização do glassfish coloquei as seguintes instruções:

Código: [Selecionar]
ulimit -Hn 65536
ulimit -Hn 65536


E agora não está mais dando esse problema.  (nao gosto de hardcode, mas foi a solução que encontrei)

Aproveitando o tópico, estou tendo problema de memória disponível quando eu rodo o vacuum do postgres, alguém aqui conhece o parâmetro que limita a memória do vacuum do postgre 8.4 (não tenho certeza se é vacuum_mem), ou alguma forma de aumentar a memória virtual sem reparticionar o disco?
« Última modificação: 22 de Outubro de 2011, 13:52 por evefuji »

Offline zekkerj

  • Usuário Ubuntu
  • *
  • Mensagens: 19.637
  • Gratidão gera gratidão, lamúria gera lamúria...
    • Ver perfil
    • Blog do Zekke
Re: "Too many open files" erro -> ulimit -n 65536 não resolve
« Resposta #4 Online: 22 de Outubro de 2011, 14:20 »
Citar
alguma forma de aumentar a memória virtual sem reparticionar o disco?

vc pode criar um arquivo contíguo ("dd if=/dev/zero of=arquivo.swp bs=1M count=<tamanho desejado da memória em MiB>"), depois usá-lo como memória swap.

mkswap arquivo.swp
sudo swapon arquivo.swp


Este último comando tem que ser reexecutado a cada boot.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Offline evefuji

  • Usuário Ubuntu
  • *
  • Mensagens: 12
    • Ver perfil
Re: "Too many open files" erro -> ulimit -n 65536 não resolve
« Resposta #5 Online: 23 de Outubro de 2011, 13:49 »
Citar
alguma forma de aumentar a memória virtual sem reparticionar o disco?

vc pode criar um arquivo contíguo ("dd if=/dev/zero of=arquivo.swp bs=1M count=<tamanho desejado da memória em MiB>"), depois usá-lo como memória swap.

mkswap arquivo.swp
sudo swapon arquivo.swp


Este último comando tem que ser reexecutado a cada boot.
obrigado, acredito que deu certinho, estou testando aqui qualquer coisa aviso.

thanks

Offline zekkerj

  • Usuário Ubuntu
  • *
  • Mensagens: 19.637
  • Gratidão gera gratidão, lamúria gera lamúria...
    • Ver perfil
    • Blog do Zekke
Re: "Too many open files" erro -> ulimit -n 65536 não resolve
« Resposta #6 Online: 23 de Outubro de 2011, 23:22 »
O comando "free -m" pode confirmar pra você se resolveu ou não.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D