Resolver “há Muitos arquivos Abertos erro” e “nativos OutOfMemory devido a falha ao criar thread” problemas do WebSphere Application Server em execução no Linux

> Corpo

image

Nós recebemos muito poucos registros de problemas (PMRs) / pedidos de serviço (SRs) para o nativo de OutOfMemory problemas do WebSphere Application Server e um dos mais famosos nativo OOM problemas acontece, sobretudo, no sistema operacional Linux, devido à insuficiência de ulimit -u(NPROC) valor.
nós também recebemos um bom número de PMRs para” demasiados arquivos abertos ” erro para servidor de aplicações WebSphere executando no Linux.Com um ajuste simples de solução de problemas e de comando do ulimit, você pode facilmente evitar abrir um PMR com suporte IBM para estas questões.

1) o que é o ulimit no Linux?
o comando ulimit permite que você controle os limites de recursos do usuário no sistema, tais como o tamanho dos dados do processo, a memória virtual do processo, o tamanho dos arquivos do processo, o número de processos, etc.

2) O que acontece quando as configurações neste comando não são configuradas corretamente?
várias questões acontecem como o OutOfMemory nativo, muitos erros de arquivos abertos, arquivos de dump não estão sendo gerados completamente etc.

3) como pode verificar a configuração actual do ulimit?
existem várias formas de verificar a configuração actual:

a) a partir do comando prompt, issue
$ ulimit-a
podemos ver saída semelhante como abaixo.
tamanho do arquivo core (blocos, -c) 0
dados de seg tamanho (kbytes, -d) ilimitado
prioridade de agendamento (-e) 0
tamanho do arquivo (blocos, -f) ilimitado
pendentes sinais (-i) 32767
max de memória bloqueado (kbytes, -l) 32
tamanho máximo de memória (kbytes, -m) ilimitado
arquivos abertos (-n) 1024
tamanho do tubo (512 bytes, -p) 8
POSIX filas de mensagem (bytes, -q) 819200
prioridade de tempo real (-r) 0
pilha de tamanho (kbytes, -s) 10240
tempo de cpu (segundos, -t) ilimitado
max processos de utilizador (-u) 50
memória virtual (kbytes, -v) ilimitado
bloqueios de arquivo (-x) ilimitado
Isso vai exibir todas as configurações atuais que são definidas para a sessão de autenticação atual e por limites moles padrão serão exibidas. Os limites podem ser macios e duros.
limites rígidos são o limite máximo que pode ser configurado. Apenas o usuário root pode aumentar os limites rígidos, embora outros usuários podem diminuí-los. Limites Soft podem ser definidos e alterados por outros usuários, mas eles não podem exceder os limites duros.
se quiser encontrar valores-limite específicos, emitir
ulimit-Sa
para os valores-limite actuais não vinculativos.
ulimit-Ha
para o valor-limite actual.

B) Se você conhece o ID do processo (PID) do servidor de Aplicação WebSphere para ser investigado, você também pode inspecionar o seguinte arquivo.
Location: /proc / <PID>
File: limits
the contents of this file is similar to the output of the “ulimit-a” command.
este ficheiro terá uma lista dos parâmetros ulimit e dos seus valores associados para o PID especificado.
C) se souber o ID do processo do servidor que deseja verificar a configuração actual do ulimit, poderá usar um Javacore ao emitir
kill -3 <PID>
poderá abrir este Javacore em qualquer editor de texto (como o NotePad++, Ultra Edit etc.)
e procurar por ulimit e vai levar-lhe a secção ulimit.
exemplo de configurações de ulimit como é visto a partir de um Javacore.
Limites do Usuário (em bytes exceto para NOFILE e NPROC)
————————————————————–
tipo soft limit limite rígido
RLIMIT_AS 11788779520 ilimitado
RLIMIT_CORE 1024 ilimitado
RLIMIT_CPU ilimitado
RLIMIT_DATA ilimitado
RLIMIT_FSIZE ilimitado
RLIMIT_LOCKS ilimitado
RLIMIT_MEMLOCK ilimitado
RLIMIT_NOFILE 18192 18192
RLIMIT_NPROC 79563 79563
RLIMIT_RSS 8874856448 ilimitado
RLIMIT_STACK 33554432 ilimitado
Se você deseja encontrar as configurações globais, inspeccione o ficheiro abaixo no linux.
/ etc/segurança / limites.conf.
quaisquer alterações a estes ficheiros de limites de configuração globais devem ser efectuadas pelo seu administrador de Sistema.
para descobrir mais detalhes sobre cada configuração no comando ulimit e também para descobrir sobre o comando ulimit em vários so, veja esta technote: Guidelines for setting ulimits (WebSphere Application Server)

4) Que tipo de OOM nativo é esperado devido a configurações insuficientes do ulimit?
um evento fora da memória com um “falha em criar um tópico” vai acontecer.
exemplo: Abaixo a mensagem aparecerá em Javacore.
“systhrow” (00040000) Detail “java/lang/OutOfMemoryError”
“Failed to create a thread: retVal-1073741830, errno 12” received
errno 12 is an real native OOM on a start thread.
às vezes, falha em criar um tópico também é visto em logs de servidor como SystemOut.log, SystemErr.log etc., e também nos logs da FFDC e este erro indica que um OutOfMemory nativo aconteceu durante a criação de um novo tópico.

5) Qual é a razão para este erro acontecer?
the reason is, the current ulimit-u (NPROC) value is too low causing it.
o limite nproc normalmente só conta processos em um servidor para determinar este número. Sistemas Linux executando servidor de Aplicação WebSphere são um caso particular. O limite nproc no Linux conta o número de threads dentro de todos os processos que podem existir para um determinado usuário. Para a maioria dos casos de versões mais antigas do Linux este valor será descumprido por volta de 2048. Para fora da caixa Red Hat Enterprise Linux (RHEL) 6, o valor padrão para nproc será definido para 1024.
esta configuração de baixo padrão para sistemas maiores não permitirá threads suficientes em todos os processos.

6) Como resolver este problema?
WebSphere Application Server Support recomenda a configuração do ulimit-u ou nproc para um valor de 131072 quando executado no Linux para contabilizar com segurança todos os threads bifurcados dentro de processos que poderiam ser criados.
pode ser aumentado temporariamente para a sessão em curso, definindo
ulimit-u 131072
que define o valor para o limite suave.
para definir limites macios e duros, emitir
ulimit-Su 131072 para limite macio.
ulimit-Hu 131072 para limite rígido.
para configurá-lo globalmente, o administrador do sistema Linux tem que editar
/etc/security/limits.conf
we have this technote explaining this: Insufficient ulimit-u (NPROC) Value Contributes to Native OutOfMemory

7) What about “Too Many Open Files” error?
este erro indica que todos os cabos de arquivos disponíveis para o processo foram usados (isto inclui sockets também).
exemplo: erros semelhantes aos abaixo serão vistos nos registos do servidor.
java.io.IOException: demasiados ficheiros abertos
prefs W não conseguiram bloquear os prefeitos do utilizador. Código de erro UNIX 24.

8) Por que este erro acontece?
isso pode acontecer se o número atual de arquivos abertos limite é muito baixo ou se este é o resultado de pegas de arquivos vazando por alguma parte da aplicação.

9) Como corrigir isto?
o Suporte IBM recomenda o número de arquivos abertos definindo o valor ulimit-n para o servidor de aplicações Webesfera rodando no Linux como 65536 para os limites macios e duros.
ulimit-Sn 65536
ulimit-Hn 65536

10) e se houver uma fuga de descritor de ficheiro no pedido?
no Linux, podemos descobrir se algum arquivo aberto em particular está crescendo ao longo de um período de tempo, levando abaixo dados com o comando lsof contra o ID problemático do processo JVM em uma base periódica.
lsof-p-r > lsof.out
a saída irá fornecer-lhe todos os arquivos abertos para o PID especificado. Você será capaz de determinar quais arquivos são abertos e quais arquivos estão crescendo ao longo do tempo.
Alternativamente, você pode listar o conteúdo dos descritores de arquivo como uma lista de links simbólicos no diretório seguinte, onde você substitui PID por
o ID do processo. Isto é especialmente útil se não tiver acesso ao comando lsof:
ls-al/proc/PID / fd
Technote relacionado: demasiados ficheiros abertos mensagem de erro

11) há mais alguma coisa para ser sintonizada?
temos mais uma configuração que podemos sintonizar no Linux usando o pid_max, o que é raro e ocorre apenas em ambientes grandes. Se você não está usando um ambiente grande, você pode saltar este passo.
a configuração pid_max é para o limite interno para o número máximo de identificadores de processo únicos que o seu sistema suporta.
o valor padrão é 32.768 e isto é suficiente para a maioria dos clientes.
em ambientes grandes com um grande número de processos há uma possibilidade de que este limite pode ser alcançado e
OutOfMemory nativo vai acontecer com mensagem semelhante em
Javacore com falha em criar errno 11 thread.
Example:
Dump Event ” systhrow “(00040000) Detail”java/lang/OutOfMemoryError”
” Failed to create a thread: retVal -106040066, errno 11 ” received
To find the current pid_max value on Linux.
cat / proc / sys / kernel / pid_max
To increase it,issue
sysctl-w kernel.Pid_max=<Value>
Sometimes, the default 32.768 can be reached due to some thread leak/s, causing native OOM. Neste caso, você tem que consertar este vazamento de linha para resolver o OOM nativo.
Related technotes:
Troubleshooting native memory issues
Potential native memory use in WebSphere Application Server thread pools
Summary:
Make sure to have the below ulimit settings on Linux to avoid ” too many open files error “and” native out of memory ” issues due to failed to create a thread.
Limites do Usuário (em bytes exceto para NOFILE e NPROC)
soft_limit hard_limit
RLIMIT_NOFILE 65536 65536
RLIMIT_NPROC 131072 131072

12) há mais alguma coisa para seleção?O suporte da IBM recomenda os valores abaixo para todas as configurações do ulimit para o servidor de aplicações Webesfera rodando no Linux, que inclui as configurações que discutimos até agora.
Limites do Usuário (em bytes exceto para NOFILE e NPROC)
tipo soft limit limite rígido
RLIMIT_AS ilimitado
RLIMIT_CORE ilimitado
RLIMIT_CPU ilimitado
RLIMIT_DATA ilimitado
RLIMIT_FSIZE ilimitado
RLIMIT_LOCKS ilimitado
RLIMIT_MEMLOCK 65536 65536
RLIMIT_NOFILE 65536 65536
RLIMIT_NPROC 131072 131072

13) Qual é o próximo?
certifique-se de ter as configurações acima discutidas em todas as aplicações WebSphere servidor JVMs como DMGr, NodeAgent e AppServers e reiniciar o JVMs se as configurações foram feitas globalmente ou desligar e voltar com o mesmo usuário se as alterações foram feitas na sessão atual (shell).

Deixe uma resposta

O seu endereço de email não será publicado.