Temos um mecanismo de pesquisa Java distribuído baseado no Lucene que normalmente executa tantos processos que cada um pode ter seus próprios conjuntos de encadeamentos em ~ 100 hosts, mas temos uma implementação de desenvolvimento que pode ser executada em uma única estação de trabalho hex-core de 64GB que usamos para o desenvolvimento.
Nós tínhamos estado executando com sucesso o Ubuntu 14.04 nessas estações de trabalho com configurações de ulimit:
gada@C010390:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256189
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 51200
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 256189
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Todos os processos do mecanismo de pesquisa são iniciados por um script de um único processo.
Recentemente, atualizamos para o Ubuntu 16.04 e agora estamos executando: java.lang.OutOfMemoryError: unable to create new native thread
erros ao tentar iniciar todos os processos necessários. Pesquisei no Google e vi postagens sobre novos limites de recursos sendo definidos pelo systemd, por exemplo:
link
Eu tentei seguir este post e definir
DefaultTasksMax=infinity
TasksMax=infinity
UserTasksMax=infinity
no seguinte:
/etc/systemd/system.conf
/etc/systemd/user.conf
/etc/systemd/logind.conf
e reinicializando, mas isso não parece ter efeito algum.
Eu verifiquei o dpkg e pareço estar executando systemd 229-4ubuntu7
.
gada@C010390:~$ dpkg -l systemd
...
ii systemd 229-4ubuntu7 amd64 system and service manager
De acordo com este post:
link
os novos limites do processo systemd foram revertidos em 229-4ubuntu6
, mas ainda estou com problemas.
Alguém por favor pode me ajudar a diagnosticar qual limite de recursos do sistema está me impedindo de criar novos encadeamentos Java no Ubuntu 16.04 e como remover esse limite? Eu suponho que é devido a algum limite de systemd desde que é a grande diferença entre o Ubuntu 14.04 e 16.04, mas eu não sei com certeza e não sei o que mais em 16.04 poderia estar limitando a criação de threads. Agradecemos antecipadamente por qualquer ajuda.