Ratkaista” liian monta avointa tiedostoa virhe ”ja” native OutOfMemory due to failed to create thread ” ongelmat WebSphere-sovelluspalvelimessa, joka toimii Linuxissa

Body

image

saamme melko vähän ongelmatietoja (pmrs) / palvelupyyntöjä (SRs) WebSphere-sovelluspalvelimen natiivi-OutOfMemory-ongelmista ja yksi tunnetuimmista natiivi-OOM-ongelmista tapahtuu erityisesti Linux-käyttöjärjestelmässä riittämättömän ULIMIT-u(NPROC) – arvon vuoksi.
saamme myös hyvän määrän PMRs: ää ”liian monta avointa tiedostoa” – virheestä WebSphere-sovelluspalvelimelle, joka toimii Linuxissa.
yksinkertaisen vianmäärityksen ja ulimit-käskyn virityksen avulla voit helposti välttää PMR: n avaamisen IBM: n tuella näihin ongelmiin.

1) Mikä on Ulimit Linuxissa?
ulimit-komennolla voit hallita järjestelmän käyttäjäresurssirajoja, kuten prosessidatan kokoa, virtuaalimuistia ja prosessitiedoston kokoa, prosessin lukumäärää jne.

2) Mitä tapahtuu, kun tämän komennon asetuksia ei ole määritetty oikein?
erilaisia ongelmia tapahtuu, kuten natiivi OutOfMemory, liian monta avointa tiedostoa virhe, dumppitiedostoja ei luoda kokonaan jne.

3) Miten voit tarkistaa nykyiset ulimit-asetukset?
on olemassa useita tapoja tarkistaa nykyiset asetukset:

a) komentokehotteesta, numerosta
$ ulimit-a
voimme nähdä samantapaisen ulostulon kuten alla.
core file size (blocks, -c) 0
data seg size (kbytes, -d) rajoittamaton
ajoitusprioriteetti (-e) 0
Tiedoston koko (blocks, -f) rajoittamaton
vireillä olevat signaalit (-i) 32767
Max lukittu muisti (kbytes, -L) 32
max memory size (kbytes, -m) rajoittamaton
avoimet tiedostot (-n) 1024
putken koko (512 tavua, -P) 8
POSIX-viestijonot (tavua,-Q) 819200
reaaliaikainen prioriteetti (-R) 0
pinon koko (kbytes, -s) 10240
suoritinaika (sekuntia, -t) rajoittamaton
käyttäjän maksimiprosessit (-U) 50
virtuaalimuisti (kbytes, -v) rajoittamaton
tiedostolukot (-x) rajoittamaton
tämä näyttää kaikki nykyiset asetukset, jotka on asetettu nykyiselle kirjautumisistunnolle ja oletusarvoisesti pehmeät rajat näytetään. Rajat voivat olla pehmeitä ja kovia.
kovat raja-arvot ovat maksimiraja, joka voidaan määrittää. Vain root-käyttäjä voi nostaa kovia rajoja, vaikka muut käyttäjät voivat pienentää niitä. Muut käyttäjät voivat asettaa ja muuttaa pehmeitä rajoja, mutta ne eivät voi ylittää kovia rajoja.
jos haluat löytää erityiset raja-arvot kysymys
ulimit-Sa
nykyiselle pehmeälle raja-arvolle.
ulimit-Ha
nykyiselle kovalle raja-arvolle.

b) Jos tiedät tutkittavan WebSphere-sovelluspalvelimen Prosessitunnuksen (PID), voit tarkastaa myös seuraavan tiedoston.
Location:/proc / <PID>
File:limits
tämän tiedoston sisältö on samanlainen kuin ”ulimit-a” – komennon ulostulo.
tässä tiedostossa on luettelo ulimitin parametreista ja niihin liittyvistä arvoista määritetylle PID: lle.
c) Jos tiedät palvelimen prosessitunnuksen, jonka haluat tarkistaa ulimitin nykyiset asetukset, voit ottaa Javacoren antamalla
kill -3 <PID>
voit avata tämän Javacoren missä tahansa tekstieditorissa (kuten NotePad++, Ultra Edit jne.)
ja etsi ulimit ja se vie sinut ulimit-osioon.
esimerkki Ulimitin asetuksista sellaisena kuin se nähdään Javacoresta.
Käyttäjärajat (tavuina paitsi NOFILE ja NPROC)
————————————————————–
type soft limit hard limit
rlimit_as 11788779520 rajoittamaton
RLIMIT_CORE 1024 rajoittamaton
RLIMIT_CPU rajoittamaton rajoittamaton
RLIMIT_DATA rajoittamaton rajoittamaton
RLIMIT_FSIZE rajoittamaton rajoittamaton
RLIMIT_LOCKS rajoittamaton rajoittamaton
RLIMIT_MEMLOCK rajoittamaton rajoittamaton
rlimit_nofile 18192 18192
rlimit_nproc 79563 79563
rlimit_rss 8874856448 rajoittamaton
RLIMIT_STACK 33554432 rajoittamaton
jos haluat löytää Yleisasetukset, tarkasta alla oleva tiedosto Linuxissa.
/ etc / security / limits.conf.
kaikki muutokset näihin yleisiin määritysrajoitustiedostoihin tulee tehdä järjestelmän ylläpitäjän toimesta.
lisätietoja jokaisesta ulimit-komennon asetuksesta ja ulimit-komennosta eri käyttöjärjestelmissä on tässä technote: Guidelines for setting ulimits (WebSphere Application Server)

4) millainen natiivi OOM on odotettavissa puutteellisten ulimit-asetusten vuoksi?
tulee tapahtumaan out of memory Dump-tapahtuma, jossa on ”ei onnistuttu luomaan säiettä”.
esimerkki: Alla viesti näkyy Javacore.
”systhrow” (00040000) yksityiskohta ”java/lang/OutOfMemoryError”
”ei onnistunut luomaan säiettä: retVal -1073741830, errno 12” vastaanotettu
errno 12 on varsinainen natiivi OOM aloituskierteellä.
joskus säiettä ei voitu luoda myös Systemoutin kaltaisissa palvelinlokeissa.loki, SystemErr.loki jne., ja myös FFDC lokit ja tämä virhe osoittaa natiivi Outofmory tapahtui luomisen aikana uuden säiettä.

5)Mikä on tämän virheen syy?
syynä on, että nykyinen ULIMIT-u(NPROC) – arvo on liian alhainen aiheuttaen sen.
nproc-raja-arvo laskee yleensä vain palvelimen prosessit tämän luvun määrittämiseen. WebSphere-sovelluspalvelinta käyttävät Linux-järjestelmät ovat erityistapaus. Nproc-raja Linuxissa laskee säikeiden määrän kaikissa prosesseissa, jotka voivat olla olemassa tietylle käyttäjälle. Useimmissa tapauksissa vanhemmat versiot Linux tämä arvo on oletuksena noin 2048. Out of the box Red Hat Enterprise Linux (RHEL) 6: lle nproc: n oletusarvo on 1024.
tämä pieni oletusasetus suuremmille järjestelmille ei salli tarpeeksi säikeitä kaikissa prosesseissa.

6) Miten tämä ongelma korjataan?
WebSphere Application Server Support suosittelee ulimit-u: n tai nproc: n asettamista arvoon 131072 Linuxissa suoritettaessa, jotta kaikki haaroitetut säikeet voidaan turvallisesti ottaa huomioon luotavissa prosesseissa.
sitä voidaan nostaa tilapäisesti kuluvaa istuntoa varten asettamalla
ulimit-u 131072
, joka asettaa arvon soft limitille.
asettaa sekä pehmeät että kovat rajat, kysymys
ulimit-Su 131072 pehmeälle rajalle.
ulimit-Hu 131072 kovalle rajalle.
asettaakseen sen globaalisti Linuxin järjestelmänvalvojan on muokattava
/ etc/security / limits.conf
meillä on tämä technote selittää tämän: riittämätön ulimit-u (NPROC) arvo edistää natiivi OutOfMemory

7) entä ”liian monta avointa tiedostoa” virhe?
tämä virhe osoittaa, että kaikki käytettävissä olevat tiedostokahvat prosessia varten on käytetty (Tämä sisältää myös pistorasiat).
esimerkki: alla olevat virheet näkyvät Palvelinlokeissa.
java.io.IOException: liian monta avointa tiedostoa
prefs W ei voinut lukita käyttäjän prefejä. UNIX-virhekoodi 24.

8) miksi tämä virhe tapahtuu?
se voi tapahtua, jos nykyinen avoimien Tiedostojen raja on liian alhainen tai jos tämä johtuu siitä, että sovelluksen jokin osa on vuotanut tiedostokahvoja.

9) Miten tämä korjataan?
IBM: n tuki suosittelee avoimien tiedostojen määrää, joka asettaa Linuxissa toimivalle WebSphere-sovelluspalvelimelle ulimit-n-arvon 65536 sekä pehmeille että koville rajoille.
ulimit-Sn 65536
ulimit-Hn 65536

10) Mitä jos hakemuksessa on tiedostokuvausvuoto?
Linuxissa, voimme löytää, jos jokin tietty avoimet tiedostot kasvavat ajan kuluessa ottamalla alle tietoja lsof komento vastaan hän ongelmallinen JVM prosessi ID määräajoin.
lsof-p-r > lsof.out
tuloste antaa sinulle kaikki avatut tiedostot määritetylle PID: lle. Voit määrittää, mitkä tiedostot avataan ja mitkä tiedostot kasvavat ajan myötä.
voit vaihtoehtoisesti luetella tiedostokuvaajien sisällön symbolisten linkkien luettelona seuraavassa hakemistossa, jossa PID korvataan
prosessitunnuksella. Tämä on erityisen hyödyllistä, jos et pääse käsiksi lsof-komentoon:
LS-al / proc/PID / fd
Related technote: too Many Open Files Virheilmoitus

11) Onko mitään muuta viritettävää?
meillä on vielä yksi asetus, jonka voimme virittää Linuxissa pid_maxin avulla, mikä on harvinaista ja tapahtuu vain suurissa ympäristöissä. Jos et käytä suurta ympäristöä, voit ohittaa tämän vaiheen.
pid_max-asetus on järjestelmäsi tukemien yksilöllisten prosessitunnisteiden enimmäismäärän sisäinen raja-arvo.
oletusarvo on 32 768 ja tämä riittää useimmille asiakkaille.
laajoissa ympäristöissä, joissa on valtava määrä prosesseja, on mahdollista, että tämä raja voidaan saavuttaa ja
native OutOfMemory tapahtuu samanlaisella viestillä
Javacore kanssa epäonnistui luomaan säiettä errno 11.
esimerkki:
Dump Event ”systhrow” (00040000) yksityiskohta ”java/lang/OutOfMemoryError”
”ei onnistunut luomaan säiettä: retVal -106040066, errno 11” sai
löytääkseen nykyisen pid_max-arvon Linuxissa.
cat/proc/sys/kernel / pid_max
sen lisäämiseksi,kysymys
sysctl-w kernel.pid_max = <arvo>
joskus oletusarvo 32 768 voidaan saavuttaa jonkin kierteen vuodon/s takia, mikä aiheuttaa natiivin OOM: n. Tässä tapauksessa,sinun täytyy korjata tämä Lanka allas vuoto ratkaista native OOM.
liittyvät teknotes:
vianmääritys natiivimuistiongelmat
mahdollinen natiivimuistin käyttö WebSphere-sovelluspalvelimen kierrealtaissa
Yhteenveto:
varmista, että Linuxissa on alla olevat ulimit-asetukset, jotta vältetään ”liian monta avointa tiedostovirhettä” ja ”natiivi pois muistista” – ongelmat, jotka johtuvat kierteen luomisen epäonnistumisesta.
Käyttäjärajat (tavuina paitsi NOFILE ja NPROC)
soft_limit hard_limit
RLIMIT_NOFILE 65536 65536
RLIMIT_NPROC 131072 131072

12) onko muuta tarkistettavaa?
IBM support suosittelee alla olevia arvoja kaikille Ulimit-asetuksille WebSphere-sovelluspalvelimelle, joka toimii Linuxissa ja sisältää tähän mennessä käsittelemämme asetukset.
User Limits (tavuina paitsi nofile ja NPROC)
type soft limit hard limit
RLIMIT_AS unlimited unlimited
RLIMIT_CPU unlimited unlimited
RLIMIT_DATA unlimited unlimited
RLIMIT_FSIZE unlimited unlimited
RLIMIT_LOCKS unlimited unlimited
rlimit_memlock 65536 65536
rlimit_nofile 65536 65536
rlimit_nproc 131072 131072

13) mitä seuraavaksi?
varmista, että yllä mainitut asetukset ovat kaikilla WebSphere-sovelluspalvelimen JVMs: llä, kuten Dmgr: llä, Nodeagentilla ja Appservereillä ja käynnistä JVMs uudelleen, jos asetukset on tehty maailmanlaajuisesti, tai kirjaudu pois ja kirjaudu takaisin saman käyttäjän kanssa, jos muutokset on tehty nykyisessä istunnossa (shell).

Vastaa

Sähköpostiosoitettasi ei julkaista.