[MWy] JMS - OutOfMemoryError

Petr Tůma petr.tuma at d3s.mff.cuni.cz
Tue Apr 9 20:56:29 CEST 2013


Dobry den,

ten pocet vlaken nemusi byt uplne neobvykly, hodne zalezi na tom, na 
jakem stroji a v jake konfiguraci ActiveMQ spoustite. Samotna JVM muze 
klidne spotrebovat tak 10-15 vlaken (hodne zalezi na tom, kolik 
procesoru je k dispozici, GC vlakna se vytvareji podle toho). Dalsi je 
ActiveMQ library, ktera ma na nektere veci thread pool, ten v Jave tusim 
vytvari zase minimalne tolik vlaken, kolik ma platforma procesoru. 
Moduly prenosovych protokolu maji take sva vlakna, neco bude uvnitr 
session, extra vlakno se vytvari pro kazdou destination na brokeru ... 
ono se to nascita :-)

Asi je potreba doplnit, ze spoustet vice klientu na jednom stroji, kazdy 
v samostatne JVM, nemusi byt nutne typicky use case.

Jinak celkove spotrebe jde pomoci pomoci -Xss na JVM command line. 
Default na 64 bit JVM je 1MB, coz je docela dost.

Petr Tuma


On 09/04/13 16:46, Zbyněk Jiráček wrote:
> Dobré odpoledne,
> narazil jsem při řešení úkolu číslo 3 na problém s vlákny. Při testování
> své banky a klientů, při použití více než dvou klientů záhy začnu
> obdržovat výjimky OutOfMemoryError, vždy při vytváření nějakého vlákna
> uvnitř ActiveMQ. Po chvíli už pak nejde spustit žádného nového klienta,
> ani žádnou jinou aplikaci v javě (např. eclipse) s následující, nebo
> podobnou hláškou:
>
> Error occurred during initialization of VM
> java.lang.OutOfMemoryError: unable to create new native thread
>      at java.lang.Thread.start0(Native Method)
>      at java.lang.Thread.start(Thread.java:640)
>      at java.lang.ref.Reference.<clinit>(Reference.java:145)
>
> Když ukončím některé klienty, tak se to zase vrátí do normálu, zkrátka
> to působí, jako že aplikace používá velké množství vláken, která navíc
> při běhu přibývají. To se mi potvrdilo, když jsem si příkazem "ps -eLf |
> grep java" nechal vypisovat vlákna JVM. S každým novým klientem se
> vytváří tak 30-50 vláken, částečně v brokeru, částečně v samotném
> klientovi. To se mi zdá strašně moc. Zkoušel jsem stejný experiment i s
> čistou implementací, kterou jsem si stáhnul z webu. Tam vlákna s novými
> klienty přibývají o něco méně, ale při spuštění sedmého klienta už jsem
> obdržel hlášku výše.
>
> A tak bych se chtěl zeptat, je něco divně u mě, nebo je prostě normální,
> že JMS potřebuje desítky vláken na každého klienta? Stejně tak jako to,
> že systém při zhruba 170 běžících vláknech JVM (celkem v systému jich je
> kolem 400) odmítne vytvářet další. Nebo je chyba někde jinde? (v
> poskytnuté implementaci banky a klientů, v nastavení ActiveMQ?). Přijde
> mi totiž, že framework, který zvládne max. pár klientů, by nebyl dvakrát
> užitečný.
>
> Děkuji za reakce
>
> Zbyněk Jiráček
>
>
> _______________________________________________
> MWy mailing list
> MWy at d3s.mff.cuni.cz
> https://d3s.mff.cuni.cz/mailman/listinfo/mwy
>




More information about the NSWI080 mailing list