Sou um desenvolvedor de software usando principalmente o Java no Arch Linux. Estou passando por muitas falhas de recursos recentemente, no meu ambiente de desenvolvimento e no próprio sistema.
Quando inicio todos os aplicativos que geralmente uso o sistema começa a gerar erros, por exemplo:
No zsh:
mlenz@loki ~/[redacted] (git)-[master] % cd ..
VCS_INFO_detect_git:9: fork failed: resource temporarily unavailable
No Eclipse (meu IDE):
Unhandled event loop exception
unable to create new native thread
No Wildfly (o servidor de aplicativos que usamos para o projeto atual) durante a inicialização:
13:19:54,962 ERROR [org.xnio.listener] (XNIO-1 I/O-2) XNIO001007: A channel event listener threw an exception: java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:714)
...
Eu suspeitei de alguns problemas de ulimit
, seja o nproc
ou nofile
limit, mas consegui defini-los para alguns valores extraordinariamente grandes sem que o problema fosse corrigido:
mlenz@loki ~ % ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) unlimited
-u: processes 256106
-n: file descriptors 65535
-l: locked-in-memory size (kbytes) 1024
-v: address space (kbytes) unlimited
-x: file locks unlimited
-i: pending signals 63787
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0
-N 15: unlimited
Também descobri que o problema pode ser um limite de recursos do kernel para todo o sistema, por exemplo, o número de identificadores de arquivos, embora /proc/sys/fs/file-nr
diga o contrário:
mlenz@loki ~ % cat /proc/sys/fs/file-nr
13312 0 1629104
Nosso sysadmin verificou lsof
e achou que o número de linhas parecia extremamente alto, mas eu também chequei no computador de outro colega e ele tinha um número similar de linhas lá:
mlenz@loki ~ % lsof | wc -l
228787
Meu ambiente de desenvolvimento é bastante incomum, pois geralmente inicio 2 servidores de aplicativos Wildfly (um é um tipo de dummy para um sistema externo, enquanto o outro é usado para nosso aplicativo). O problema parece ocorrer apenas quando eu inicio os dois servidores de aplicativos, juntamente com alguns dos outros aplicativos que eu uso no meu computador. Há muitos serviços em execução no meu sistema, portanto, talvez seja necessário aumentar o limite que o sistema alcança, mas não tenho a menor ideia de qual deles pode ser.
Alguma idéia do que eu possa estar perdendo ou o que posso verificar para ver o que está errado?
Tags ulimit arch-linux