Risolvere “Troppi file Aperti di errore” e “native OutOfMemory a causa di non creare il thread” problemi di WebSphere Application Server in esecuzione su Linux

Corpo

image

riceviamo abbastanza, qualche problema record (PMRs) / le richieste di servizio (SRs) nativo di OutOfMemory problemi di WebSphere Application Server e uno dei più famosi nativi problemi OOM accade soprattutto per il sistema operativo Linux a causa della insufficienza di ulimit -u(NPROC) valore.
Riceviamo anche un buon numero di PMR per l’errore “Troppi file aperti” per WebSphere Application Server in esecuzione su Linux.
Con la semplice risoluzione dei problemi e l’ottimizzazione dei comandi ulimit, è possibile evitare facilmente l’apertura di un PMR con supporto IBM per questi problemi.

1) Che cos’è ulimit in Linux?
Il comando ulimit consente di controllare i limiti delle risorse dell’utente nel sistema, come la dimensione dei dati di processo, la memoria virtuale di processo e la dimensione del file di processo, il numero di processi ecc.

2) Cosa succede quando le impostazioni di questo comando non sono impostate correttamente?
Si verificano vari problemi come OutOfMemory nativo, troppi errori di file aperti,i file di dump non vengono generati completamente ecc.

3) Come è possibile controllare le impostazioni ulimit correnti?
Ci sono vari modi per controllare le impostazioni correnti:

a) Dal prompt dei comandi, emettere
ul ulimit-a
Possiamo vedere un output simile come di seguito.
> core dimensione del file (blocchi, -c) 0
dati seg dimensione (bytes, -d) illimitato
priorità di pianificazione (-e) 0
dimensione del file (blocchi, -f) illimitato
in attesa di segnali (-i) 32767
max memory (k, l) 32
dimensione memoria massima (in kbyte, -m) illimitato
apri file (-n) 1024
dimensione del tubo (512 byte, -p) 8
POSIX code di messaggi (byte, -q) 819200
priorità real-time (-r) 0
la dimensione dello stack (kbyte, -s) 10240
tempo di cpu (secondi, -t) illimitato
max processi utente (-u) 50
memoria virtuale (kbyte, -v) illimitato
blocchi di file (-x) illimitato
visualizza verranno visualizzate tutte le impostazioni correnti impostate per la sessione di accesso corrente e per impostazione predefinita i limiti soft. I limiti possono essere morbidi e duri.
I limiti rigidi sono il limite massimo che può essere configurato. Solo l’utente root può aumentare i limiti rigidi, anche se altri utenti possono diminuirli. I limiti soft possono essere impostati e modificati da altri utenti, ma non possono superare i limiti hard.
Se si desidera trovare valori limite specifici problema
ulimit-Sa
per il valore limite soft corrente.
ulimit-Ha
per il valore limite rigido corrente.

b) Se si conosce l’ID processo (PID) del server delle applicazioni WebSphere da esaminare, è anche possibile ispezionare il seguente file.
Location: / proc/<PID>
File:limits
Il contenuto di questo file è simile all’output del comando “ulimit-a”.
Questo file avrà un elenco di parametri ulimit e dei relativi valori associati per il PID specificato.
c) Se si conosce l’ID di processo del server che si desidera controllare le impostazioni ulimit correnti, è possibile prendere un Javacore emettendo
kill -3 < PID>
È possibile aprire questo Javacore in qualsiasi editor di testo (come NotePad++, Ultra Edit ecc.)
e cerca ulimit e ti porterà la sezione ulimit.
Esempio di impostazioni ulimit come si vede da un Javacore.
Limiti Utente (in byte, tranne per NOFILE e NPROC)
————————————————————–
tipo soft limit limite rigido
RLIMIT_AS 11788779520 illimitato
RLIMIT_CORE 1024 illimitato
RLIMIT_CPU illimitato illimitato illimitato illimitato
RLIMIT_DATA illimitato illimitato illimitato illimitato
RLIMIT_FSIZE illimitato illimitato illimitato illimitato
RLIMIT_LOCKS illimitato illimitato illimitato illimitato
RLIMIT_MEMLOCK illimitato illimitato illimitato illimitato
RLIMIT_NOFILE 18192 18192
RLIMIT_NPROC 79563 79563
RLIMIT_RSS 8874856448 illimitato
RLIMIT_STACK 33554432 illimitato
Se si desidera trovare le impostazioni globali, ispezionare il file sottostante in linux.
/etc/sicurezza / limiti.conf.
Eventuali modifiche a questi file di limiti di configurazione globali devono essere eseguite dall’amministratore di sistema.
Per ulteriori dettagli su ogni impostazione nel comando ulimit e anche per trovare informazioni sul comando ulimit su vari sistemi operativi, vedere questa nota tecnica: Linee guida per l’impostazione di ulimits (WebSphere Application Server)

4) Che tipo di OOM nativo è previsto a causa di impostazioni ulimit insufficienti?
Si verificherà un evento di dump di memoria esaurita con un “Impossibile creare un thread”.
Esempio: Sotto il messaggio apparirà in Javacore.
“systhrow” (00040000) Dettaglio “java/lang/OutOfMemoryError”
“Impossibile creare un thread: retVal -1073741830, errno 12” ricevuto
errno 12 è un OOM nativo effettivo su un thread iniziale.
A volte, non è riuscito a creare un thread è visto anche nei log del server come SystemOut.registro, sistemista.registro ecc., e anche nei registri FFDC e questo errore indica un OutOfMemory nativo avvenuto durante la creazione di nuovo thread.

5) Qual è la ragione per cui questo errore si è verificato?
Il motivo è che il valore corrente ulimit-u(NPROC) è troppo basso causandolo.
Il limite nproc di solito conta solo i processi su un server per determinare questo numero. I sistemi Linux che eseguono WebSphere Application Server sono un caso particolare. Il limite nproc su Linux conta il numero di thread all’interno di tutti i processi che possono esistere per un determinato utente. Per la maggior parte dei casi di versioni precedenti di Linux questo valore sarà predefinito a circa 2048. Per Red Hat Enterprise Linux (RHEL) 6 il valore predefinito per nproc sarà impostato su 1024.
Questa impostazione predefinita bassa per i sistemi più grandi non consente un numero sufficiente di thread in tutti i processi.

6) Come risolvere questo problema?
Il supporto di WebSphere Application Server consiglia di impostare ulimit-u o nproc su un valore di 131072 durante l’esecuzione su Linux per tenere conto in modo sicuro di tutti i thread biforcati all’interno dei processi che potrebbero essere creati.
Può essere aumentato temporaneamente per la sessione corrente impostando
ulimit-u 131072
che imposta il valore per soft limit.
Per impostare limiti soft e hard, emettere
ulimit-Su 131072 per limite soft.
ulimit-Hu 131072 per limite duro.
per impostarlo globalmente, l’amministratore di sistema Linux deve modificare
/etc/security/limits.conf
Abbiamo questa nota tecnica che spiega questo: Il valore ulimit-u (NPROC) insufficiente contribuisce a OutOfMemory nativo

7) Che dire dell’errore “Troppi file aperti”?
Questo errore indica che sono stati utilizzati tutti gli handle di file disponibili per il processo (questo include anche i socket).
Esempio: Errori simili a quelli riportati di seguito verranno visualizzati nei log del server.
java.io.IOException: troppi file aperti
prefs W Impossibile bloccare i prefs dell’utente. Codice di errore UNIX 24.

8) Perché si verifica questo errore?
Può accadere se il numero corrente di limite di file aperti è troppo basso o se questo è il risultato di handle di file trapelati da una parte dell’applicazione.

9) Come risolvere questo problema?
Il supporto IBM consiglia il numero di file aperti impostando il valore ulimit-n per WebSphere Application Server in esecuzione su Linux come 65536 per i limiti soft e hard.
ulimit-Sn 65536
ulimit-Hn 65536

10) Cosa succede se c’è una perdita di descrittore di file nell’applicazione?
Su Linux, possiamo scoprire se alcuni particolari file aperti stanno crescendo per un periodo di tempo prendendo sotto i dati con il comando lsof contro l’ID del processo JVM problematico su base periodica.
lsof-p-r > lsof.out
L’output fornirà tutti i file aperti per il PID specificato. Sarete in grado di determinare quali file vengono aperti e quali file sono in crescita nel tempo.
In alternativa è possibile elencare il contenuto dei descrittori di file come un elenco di collegamenti simbolici nella seguente directory, dove si sostituisce PID con
l’ID del processo. Ciò è particolarmente utile se non si ha accesso al comando lsof:
ls-al /proc/PID/fd
Related technote: Troppi file aperti messaggio di errore

11) C’è qualcos’altro da sintonizzare?
Abbiamo un’altra impostazione che possiamo sintonizzare su Linux usando pid_max che è raro e si verifica solo in ambienti di grandi dimensioni. Se non si utilizza un ambiente di grandi dimensioni, è possibile saltare questo passaggio.
L’impostazione pid_max è per il limite interno per il numero massimo di identificatori di processo univoci supportati dal sistema.
Il valore predefinito è 32.768 e questo è sufficiente per la maggior parte dei clienti.
Su ambienti di grandi dimensioni con un numero enorme di processi esiste la possibilità che questo limite possa essere raggiunto e
OutOfMemory nativo avverrà con un messaggio simile in
Javacore con errore di creazione del thread errno 11.
Esempio:
Dump Evento ” systhrow “(00040000) Dettaglio”java/lang/OutOfMemoryError”
” Impossibile creare un thread: retVal -106040066, errno 11 ” ricevuto
Per trovare il valore pid_max corrente su Linux.
cat /proc/sys/kernel/pid_max
Per aumentarlo,emettere
sysctl-w kernel.pid_max = < Valore >
A volte, il valore predefinito 32,768 può essere raggiunto a causa di alcune perdite di thread,causando OOM nativo. In questo caso, è necessario correggere questa perdita del pool di thread per risolvere OOM nativo.
Note tecniche correlate:
Risoluzione dei problemi di memoria nativa
Potenziale utilizzo della memoria nativa nei pool di thread di WebSphere Application Server
Riepilogo:
Assicurarsi di avere le seguenti impostazioni ulimit su Linux per evitare “troppi errori di file aperti” e “problemi di memoria nativa esauriti” dovuti alla mancata creazione di un thread.
Limiti utente (in byte ad eccezione di NOFILE e NPROC)
soft_limit hard_limit
RLIMIT_NOFILE 65536 65536
RLIMIT_NPROC 131072 131072

12) C’e ‘ qualcos’altro da controllare?
Il supporto IBM consiglia i valori seguenti per tutte le impostazioni ulimit per WebSphere Application Server in esecuzione su Linux, che includono le impostazioni discusse finora.
Limiti Utente (in byte, tranne per NOFILE e NPROC)
tipo soft limit limite rigido
RLIMIT_AS illimitato illimitato illimitato illimitato
RLIMIT_CORE illimitato illimitato illimitato illimitato
RLIMIT_CPU illimitato illimitato illimitato illimitato
RLIMIT_DATA illimitato illimitato illimitato illimitato
RLIMIT_FSIZE illimitato illimitato illimitato illimitato
RLIMIT_LOCKS illimitato illimitato illimitato illimitato
RLIMIT_MEMLOCK 65536 65536
RLIMIT_NOFILE 65536 65536
RLIMIT_NPROC 131072 131072

13) Qual è il prossimo?
Assicurarsi di avere le impostazioni sopra discusse su tutte le JVM di WebSphere Application Server come DMGr, NodeAgent e appserver e riavviare le JVM se le impostazioni sono state eseguite a livello globale o disconnettersi e accedere nuovamente con lo stesso utente se le modifiche sono state eseguite nella sessione corrente (shell).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.