Řešení „Příliš Mnoho Otevřených souborů chyby“ a „nativní OutOfMemory důsledku se nepodařilo vytvořit vlákno“ problémy v serveru WebSphere Application Server běží na Linuxu

Tělo

image

dostáváme poměrně málo problému záznamy (Pmr) / servisních požadavků (SRs) pro nativní OutOfMemory problémy v serveru WebSphere Application Server a jeden z nejvíce slavný rodák OOM problémů se děje, zvláště na OS Linux se vzhledem k nedostatečným ulimit -u(NPROC) hodnotu.
také dostáváme dobrý počet PMR pro chybu „příliš mnoho otevřených souborů“ pro WebSphere Application Server běžící na Linuxu.
díky jednoduchému řešení problémů a ladění příkazů ulimit se můžete snadno vyhnout otevření PMR s podporou IBM pro tyto problémy.

1) Co je ulimit v Linuxu?
příkaz ulimit umožňuje ovládat limity uživatelských zdrojů v systému, jako je velikost procesních dat, procesní virtuální paměť a velikost procesního souboru, počet procesů atd.

2) Co se stane, když nastavení v tomto příkazu nejsou správně nastavena?
různé problémy se stávají jako nativní OutOfMemory, příliš mnoho otevřených souborů chyba, soubory výpisu nejsou generovány úplně atd.

3) Jak můžete zkontrolovat aktuální nastavení ulimit?
Existují různé způsoby, jak chcete-li zkontrolovat aktuální nastavení:

a) Z příkazového řádku, problém
$ ulimit –
můžeme vidět podobné výstup jako níže.
core velikost souboru (bloky, -c) 0
data seg size (kbytes, -d) neomezený
prioritní plánování (-e) 0
velikost souboru (bloky, -f) neomezený
nevyřízené signály (-i) 32767
max locked memory (kbytes, -l) 32
max velikost paměti (v kilobajtech, -m) neomezený
otevřít soubory (-n) 1024
velikost potrubí (512 bajtů-p) 8
POSIXOVÉ fronty zpráv (bajty, -q) 819200
real-time prioritou (-r) 0
stack size (kbytes, -s) 10240
cpu čas (několik sekund-t) neomezený
max user procesy (-u) 50
virtuální paměti (kb, -v) neomezený
zámky souborů (-x) neomezený
zobrazí se zobrazí se všechna aktuální nastavení, která jsou nastavena pro aktuální přihlašovací relaci a ve výchozím nastavení měkké limity. Limity mohou být měkké a tvrdé.
tvrdé limity jsou maximální limit, který lze nakonfigurovat. Pouze uživatel root může zvýšit tvrdé limity, i když ostatní uživatelé je mohou snížit. Měkké limity mohou být nastaveny a měněny jinými uživateli, ale nemohou překročit tvrdé limity.
Chcete-li najít konkrétní limitní hodnoty problém
ulimit-Sa
pro aktuální soft limitní hodnotu.
ulimit-Ha
pro aktuální pevnou mezní hodnotu.

b) pokud znáte procesní ID (PID) aplikačního serveru WebSphere, který má být zkoumán, můžete také zkontrolovat následující soubor.
umístění: / proc / <PID>
soubor: limity
obsah tohoto souboru je podobný výstupu příkazu „ulimit-a“.
tento soubor bude mít seznam parametrů ulimit a jejich přidružené hodnoty pro zadaný PID.
c)Pokud znáte ID procesu serveru, který chcete zkontrolovat aktuální ulimit nastavení, můžete si vzít Javacore vydáním
zabít -3 <PID>
můžete otevřít tento Javacore v libovolném textovém editoru (jako je Poznámkový blok++, Ultra Upravit, atd.)
a vyhledejte ulimit a vezme vás do sekce ulimit.
příklad nastavení ulimit, jak je vidět z Javacore.
Uživatelské Limity (v bajtech, s výjimkou NOFILE a NPROC)
————————————————————–
typ soft limit, hard limit
RLIMIT_AS 11788779520 neomezený
RLIMIT_CORE 1024 neomezený
RLIMIT_CPU neomezený neomezený
RLIMIT_DATA neomezený neomezený
RLIMIT_FSIZE neomezený neomezený
RLIMIT_LOCKS neomezený neomezený
RLIMIT_MEMLOCK neomezený neomezený
RLIMIT_NOFILE 18192 18192
RLIMIT_NPROC 79563 79563
RLIMIT_RSS 8874856448 neomezený
RLIMIT_STACK 33554432 neomezený
Pokud chcete najít globální nastavení, prohlédněte si níže uvedený soubor v Linuxu.
/ etc / bezpečnost / limity.conf.
jakékoli změny v těchto souborech globálních konfiguračních limitů by měl provádět správce systému.
zjistit další podrobnosti o každém nastavení v příkazu ulimit, a také najít o příkaz ulimit na různých OS, viz tento technote: Pokyny pro nastavení ulimits (WebSphere Application Server)

4) Jaký druh nativní OOM se očekává, že v důsledku nedostatečné ulimit nastavení?
událost výpisu z paměti s „Nepodařilo se vytvořit vlákno“ se stane.
příklad: Níže se zobrazí zpráva v Javacore.
„systhrow“ (00040000) Detail „java/lang/OutOfMemoryError“
„Nepodařilo se vytvořit vlákno: retVal -1073741830, errno 12“ dostal
errno 12 je skutečná nativní OOM na začátek závitu.
někdy se nepodařilo vytvořit vlákno je také vidět v protokolech serveru, jako SystemOut.log, SystemErr.log atd., a také v protokolech FFDC a tato chyba označuje nativní OutOfMemory došlo při vytváření nového vlákna.

5) Jaký je důvod této chyby?
důvodem je, že aktuální hodnota ulimit-u(NPROC) je příliš nízká, což způsobuje.
limit nproc obvykle počítá pouze procesy na Serveru k určení tohoto čísla. Konkrétním případem jsou systémy Linux se systémem WebSphere Application Server. Limit nproc v Linuxu počítá počet vláken ve všech procesech, které mohou pro daného uživatele existovat. Ve většině případů starších verzí Linuxu bude tato hodnota nastavena na hodnotu přibližně 2048. Pro po vybalení z krabice Red Hat Enterprise Linux (RHEL) 6 bude výchozí hodnota pro nproc nastavena na 1024.
toto nízké výchozí nastavení pro větší systémy neumožní dostatek podprocesů ve všech procesech.

6) Jak tento problém vyřešit?
WebSphere Application Server Podpory doporučuje stanovit ulimit -u nebo nproc na hodnotu 131072, když běží na Linuxu bezpečně účtu pro všechny vidlicový podprocesy v rámci procesů, které by mohly být vytvořeny.
může být dočasně zvýšena pro aktuální relaci nastavením
ulimit-u 131072
, které nastaví hodnotu pro soft limit.
Chcete-li nastavit měkké i tvrdé limity, zadejte
ulimit-Su 131072 pro měkké limity.
ulimit-Hu 131072 pro pevný limit.
Chcete-li jej nastavit globálně, musí správce systému Linux upravit
/etc/security/limits.conf
máme tuto technote vysvětlující toto: nedostatečná hodnota ulimit-u (NPROC) přispívá k nativní OutOfMemory

7) a co chyba „příliš mnoho otevřených souborů“?
tato chyba označuje, že byly použity všechny dostupné popisovače souborů pro tento proces(včetně soketů).
Příklad: Chyby podobné níže bude vidět protokoly Serveru.
java.io.IOException: Příliš mnoho otevřených souborů
prefs W Nemohl lock User prefs. UNIX kód chyby 24.

8) Proč k této chybě dochází?
to se může stát, pokud je aktuální počet otevřených souborů limit je příliš nízká, nebo je-li to je výsledkem soubor zpracovává unikly některé části aplikace.

9) Jak to opravit?
podpory společnosti IBM doporučuje, počet otevřených souborů nastavení ulimit -n hodnota pro WebSphere Aplikační Server běží na Linuxu jako 65536 pro měkké a tvrdé limity.
ulimit-Sn 65536
ulimit-Hn 65536

10) Co když je v aplikaci únik deskriptoru souboru?
Na Linuxu, můžeme zjistit, zda nějaké konkrétní otevřít soubory jsou rostoucí v průběhu času tím, že níže uvedené údaje s lsof příkaz proti, že problematické JVM ID procesu v pravidelných intervalech.
lsof-p-r > lsof.out
výstup vám poskytne všechny otevřené soubory pro zadaný PID. Budete moci určit, které soubory jsou otevřeny a které soubory rostou v průběhu času.
Alternativně můžete vypsat obsah deskriptorů souborů jako seznam symbolických odkazů v následujícím adresáři, kde nahradíte PID
ID procesu. To je zvláště užitečné, pokud nemáte přístup k lsof příkaz:
ls-al /proc/PID/fd
Související technote: Příliš Mnoho Otevřených Souborů chybovou zprávu

11) Je něco jiného být naladěni?
máme ještě jedno nastavení, které můžeme naladit na Linuxu pomocí pid_max, což je vzácné a vyskytuje se pouze ve velkých prostředích. Pokud nepoužíváte velké prostředí, můžete tento krok přeskočit.
nastavení pid_max je určeno pro interní limit pro maximální počet jedinečných identifikátorů procesů, které váš systém podporuje.
výchozí hodnota je 32,768 a to je dostačující pro většinu zákazníků.
Na rozsáhlých prostředích s velkým počtem procesů, tam je možnost tento limit může být dosaženo, a
nativní OutOfMemory se stane s podobnou zprávu v
Javacore se nepodařilo vytvořit vlákno errno 11.
Příklad:
Výpis Událostí „systhrow“ (00040000) Detail „java/lang/OutOfMemoryError“
„Nepodařilo se vytvořit vlákno: retVal -106040066, errno 11“ obdržel
najít aktuální hodnotou pid_max na Linuxu.
cat / proc / sys / kernel / pid_max
Chcete-li jej zvýšit,zadejte
sysctl-w jádro.Pid_max=<hodnota>
někdy může být výchozí hodnota 32,768 dosažena kvůli nějakému úniku vláken, což způsobuje nativní OOM. V tomto případě musíte opravit tento únik fondu vláken, abyste vyřešili nativní OOM.
Související technotes:
nativní řešení Problémů problémy s pamětí
Potenciální nativní využití paměti v serveru WebSphere Application Server thread pools
Shrnutí:
ujistěte se, že máte pod ulimit windows na Linux, aby se zabránilo „příliš mnoho otevřených souborů chyby“ a „nativní paměti“ problémy v důsledku se nepodařilo vytvořit vlákno.
Uživatelské Limity (v bajtech, s výjimkou NOFILE a NPROC)
soft_limit hard_limit
RLIMIT_NOFILE 65536 65536
RLIMIT_NPROC 131072 131072

12) Je tam ještě něco zkontrolovat?
podpora IBM doporučuje níže uvedené hodnoty pro všechna nastavení ulimit pro WebSphere Application Server běžící na Linuxu, která zahrnují nastavení, o kterých jsme dosud diskutovali.
Uživatelské Limity (v bajtech, s výjimkou NOFILE a NPROC)
typ soft limit, hard limit
RLIMIT_AS neomezený neomezený
RLIMIT_CORE neomezený neomezený
RLIMIT_CPU neomezený neomezený
RLIMIT_DATA neomezený neomezený
RLIMIT_FSIZE neomezený neomezený
RLIMIT_LOCKS neomezený neomezený
RLIMIT_MEMLOCK 65536 65536
RLIMIT_NOFILE 65536 65536
RLIMIT_NPROC 131072 131072

13) Co je další?
ujistěte se, že máte výše zmíněné nastavení na všech WebSphere Application Server JVMs jako DMGr, NodeAgent a AppServers a restartujte JVMs pokud nastavení bylo provedeno na celém světě, nebo se odhlásit a znovu se přihlásit se stejným uživatelským pokud změny byly provedeny v aktuální relaci (shell).

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.