Rezolva” prea multe fișiere deschise eroare „și” OutOfMemory nativ din cauza nu a reușit să creeze fir ” probleme în WebSphere Application Server rulează pe Linux

corp

image

primim destul de multe înregistrări de probleme (PMR) / cereri de servicii (SRs) pentru probleme native OutOfMemory în WebSphere Application Server și una dintre cele mai faimoase probleme native Oom se întâmplă în special pe sistemul de operare Linux din cauza valorii insuficiente ulimit-u(NPROC).
de asemenea, primim un număr bun de PMR-uri pentru eroarea „prea multe fișiere deschise” pentru WebSphere Application Server care rulează pe Linux.
cu depanarea simplă și reglarea comenzii ulimit, puteți evita cu ușurință deschiderea unui PMR cu suport IBM pentru aceste probleme.

1) Ce este ulimit în Linux?
comanda ulimit vă permite să controlați limitele resurselor utilizatorului din sistem, cum ar fi dimensiunea datelor de proces, memoria virtuală de proces și dimensiunea fișierului de proces, Numărul de proces etc.

2) Ce se întâmplă atunci când setările din această comandă nu sunt configurate corect?
diverse probleme se întâmplă ca OutOfMemory nativ, prea multe fișiere deschise de eroare, fișiere dump nu sunt generate complet etc.

3) Cum puteți verifica setările ulimit curente?
există diferite moduri de a verifica setările curente:

a) din promptul de comandă, problema
$ ulimit-a
putem vedea ieșire similară ca mai jos.
Dimensiunea fișierului de bază (blocuri, -c) 0
dimensiunea seg de date (kbytes, -d) nelimitat
prioritate de programare (-e) 0
Dimensiunea fișierului (blocuri, -f) nelimitat
semnale în așteptare (-i) 32767
memorie max blocat (kbytes, -l) 32
dimensiunea memoriei max (kbytes, -m) nelimitat
fișiere deschise (-n) 1024
dimensiunea conductei (512 octeți, -P) 8
cozile de mesaje POSIX (octeți, -Q) 819200
prioritate în timp real (- r) 0
dimensiunea stivei (Kbytes,- s) 10240
timpul procesorului (secunde,- t) nelimitat
procesele maxime ale utilizatorului (- U) 50
memorie virtuală (Kbytes,- v) nelimitat
încuietori de fișiere (- x) nelimitat
aceasta va afișa vor fi afișate toate setările curente care sunt setate pentru sesiunea de conectare curentă și implicit limitele soft. Limitele pot fi moi și dure.
limitele Hard sunt limita maximă care poate fi configurată. Numai utilizatorul root poate crește limitele dure, deși alți utilizatori le pot reduce. Limitele Soft pot fi setate și modificate de alți utilizatori, dar nu pot depăși limitele hard.
dacă doriți să găsiți valori limită specifice problemă
ulimit-sa
pentru valoarea limită soft curentă.
ulimit-Ha
pentru valoarea limită hard curentă.

b)dacă cunoașteți ID-ul de proces (PID) al WebSphere Application Server de investigat, puteți inspecta și următorul fișier.
locație: /proc/<PID>
fișier:limite
conținutul acestui fișier este similar cu rezultatul comenzii „ulimit-a”.
acest fișier va avea o listă de parametri ulimit și valorile asociate acestora pentru PID-ul specificat.
c) dacă știți ID-ul de proces al serverului pe care doriți să verificați setările ulimit curente, puteți lua un Javacore prin emiterea
kill -3 <PID>
puteți deschide acest Javacore în orice editor de text (cum ar fi NotePad++, Ultra Edit etc.)
și căutați ulimit și vă va duce secțiunea ulimit.
exemplu de setări ulimit așa cum se vede dintr-un Javacore.
limite de utilizator (în octeți, cu excepția NOFILE și NPROC)
————————————————————–
tip soft limit hard limit
RLIMIT_AS 11788779520 nelimitat
rlimit_core 1024 nelimitat
rlimit_cpu nelimitat nelimitat
rlimit_data nelimitat Nelimitat
RLIMIT_FSIZE nelimitat Nelimitat
RLIMIT_LOCKS nelimitat Nelimitat
RLIMIT_MEMLOCK nelimitat nelimitat
rlimit_nofile 18192 18192
rlimit_nproc 79563 79563
rlimit_rss 8874856448 nelimitat
RLIMIT_STACK 33554432 nelimitat
dacă doriți să găsiți setările globale, inspectați fișierul de mai jos în linux.
/ etc / securitate / limite.conf.
orice modificare a acestor fișiere limite de configurare globale trebuie efectuată de administratorul de sistem.
pentru a afla mai multe detalii despre fiecare setare din comanda ulimit și, de asemenea, pentru a afla despre comanda ulimit pe diverse sisteme de operare, consultați acest technote: linii directoare pentru setarea ulimits (WebSphere Application Server)

4) Ce fel de Oom nativ este așteptat din cauza setărilor ulimit insuficiente?
un eveniment în afara memoriei cu un „nu a reușit să creeze un fir” se va întâmpla.
exemplu: Mesajul de mai jos va apărea în Javacore.
” systrow „(00040000) detaliu”java/lang/OutOfMemoryError”
” nu a reușit să creeze un fir: retVal -1073741830, errno 12 ” primit
errno 12 este un Oom nativ real pe un fir de pornire.
uneori, nu a reușit să creeze un fir este, de asemenea, văzut în jurnalele de Server, cum ar fi SystemOut.jurnal, SystemErr.jurnal etc., și, de asemenea, în jurnalele FFDC și această eroare indică un OutOfMemory nativ sa întâmplat în timpul creării de fir nou.

5) care este motivul pentru care această eroare să se întâmple?
motivul este că valoarea actuală ulimit-u (NPROC) este prea mică.
limita nproc numără de obicei numai procesele de pe un server pentru a determina acest număr. Sistemele Linux care rulează WebSphere Application Server sunt un caz particular. Limita Nproc pe Linux numără numărul de fire din toate procesele care pot exista pentru un anumit utilizator. Pentru majoritatea cazurilor de versiuni mai vechi de Linux, această valoare va fi implicită în jurul anului 2048. Pentru out of the box Red Hat Enterprise Linux (RHEL) 6 valoarea implicită pentru nproc va fi setată la 1024.
această setare implicită scăzută pentru sistemele mai mari nu va permite suficiente fire în toate procesele.

6) Cum de a rezolva această problemă?
suportul WebSphere Application Server recomandă setarea ulimit-u sau nproc la o valoare de 131072 atunci când rulează pe Linux pentru a ține cont în siguranță de toate firele bifurcate din procesele care ar putea fi create.
se poate mări temporar pentru sesiunea curentă prin setarea
ulimit-u 131072
care stabilește valoarea pentru soft limit.
pentru a seta atât limitele soft, cât și cele hard, emiteți
ulimit-Su 131072 pentru limita soft.
ulimit-Hu 131072 pentru limita hard.
pentru a-l seta la nivel global, administratorul de sistem Linux trebuie să editeze
/etc/security/limits.conf
avem această tehnică care explică acest lucru: valoarea insuficientă ulimit-u (NPROC) contribuie la OutOfMemory nativ

7) Ce zici de eroarea „prea multe fișiere deschise”?
această eroare indică faptul că au fost utilizate toate mânerele de fișiere disponibile pentru proces (aceasta include și sockets).
exemplu: erori similare de mai jos vor fi văzute jurnalele serverului.
java.io.IOException: prea multe fișiere deschise
prefs W nu a putut bloca prefs utilizator. Cod de eroare UNIX 24.

8) de ce se întâmplă această eroare?
se poate întâmpla în cazul în care numărul actual de fișiere deschise limita este prea mică sau în cazul în care acest lucru este rezultatul de fișiere mânere fiind scurgeri de o parte a cererii.

9) Cum să remediem acest lucru?
IBM support recomandă numărul de fișiere deschise setând valoarea ulimit-n pentru WebSphere Application Server care rulează pe Linux ca 65536 atât pentru limitele soft, cât și pentru cele hard.
ulimit-SN 65536
ulimit-Hn 65536

10) Ce se întâmplă dacă există o scurgere de descriptor de fișier în aplicație?
pe Linux, putem găsi dacă anumite fișiere deschise cresc într-o perioadă de timp, luând date de mai jos cu comanda lsof împotriva ID-ului procesului JVM problematic în mod periodic.
lsof-p-r > lsof.out
ieșirea vă va oferi toate fișierele deschise pentru PID-ul specificat. Veți putea determina ce fișiere sunt deschise și ce fișiere cresc în timp.
alternativ, puteți lista conținutul descriptorilor de fișiere ca o listă de legături simbolice în următorul director, unde înlocuiți PID cu
ID-ul procesului. Acest lucru este util mai ales dacă nu aveți acces la comanda lsof:
ls-al /proc/PID/fd
Technote înrudite: prea multe fișiere deschise mesaj de eroare

11) mai este ceva de reglat?
avem încă o setare pe care o putem regla pe Linux folosind pid_max, care este rară și apare doar în medii mari. Dacă nu utilizați un mediu mare, puteți sări peste acest pas.
setarea pid_max este pentru limita internă pentru numărul maxim de identificatori de proces unici pe care sistemul dvs. îi acceptă.
valoarea implicită este 32,768 și acest lucru este suficient pentru majoritatea clienților.
pe medii mari, cu număr foarte mare de procese există o posibilitate această limită poate fi atins și
OutOfMemory nativ se va întâmpla cu mesaj similar în
Javacore cu nu a reușit să creeze fir errno 11.
exemplu:
Dump eveniment „systrow” (00040000) detaliu „java/Lang/OutOfMemoryError”
„nu a reușit să creeze un fir: retVal -106040066, errno 11” primit
pentru a găsi valoarea curentă pid_max pe Linux.
cat /proc/sys/kernel/pid_max
pentru ao mări,emite
kernel sysctl-W.pid_max = < valoare >
uneori, implicit 32,768 poate fi atins din cauza unor scurgeri de fir/s,provocând Oom nativ. În acest caz, trebuie să remediați această scurgere a bazinului de fire pentru a rezolva Oom nativ.
Technotes conexe:
Depanarea problemelor de memorie nativă
utilizarea potențială a memoriei native în WebSphere Application Server thread pools
rezumat:
asigurați-vă că aveți setările ulimit de mai jos pe Linux pentru a evita problemele „prea multe fișiere deschise” și „native out of memory” din cauza nu a reușit să creeze un thread.
limite de utilizator(în octeți, cu excepția NOFILE și NPROC)
soft_limit hard_limit
RLIMIT_NOFILE 65536 65536
RLIMIT_NPROC 131072 131072

12) mai e ceva de verificat?
IBM support recomandă valorile de mai jos pentru toate setările ulimit pentru WebSphere Application Server care rulează pe Linux, care include setările pe care le-am discutat până acum.
limite de utilizator (în octeți, cu excepția NOFILE și NPROC)
tip soft limit hard limit
RLIMIT_AS nelimitat Nelimitat
RLIMIT_CORE nelimitat nelimitat
rlimit_cpu nelimitat Nelimitat
RLIMIT_DATA nelimitat Nelimitat
RLIMIT_FSIZE nelimitat Nelimitat
RLIMIT_LOCKS nelimitat nelimitat
rlimit_memlock 65536 65536
rlimit_nofile 65536 65536
rlimit_nproc 131072 131072

13) Ce urmează?
asigurați-vă că aveți setările discutate mai sus pe toate JVM-urile WebSphere Application Server precum DMGr, NodeAgent și AppServers și reporniți JVM-urile dacă setările au fost efectuate la nivel global sau deconectați-vă și conectați-vă înapoi cu același utilizator dacă modificările au fost efectuate în sesiunea curentă (shell).

Lasă un răspuns

Adresa ta de email nu va fi publicată.