[MWy] JMS - OutOfMemoryError

Zbyněk Jiráček JBI at seznam.cz
Tue Apr 9 16:46:14 CEST 2013


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://d3s.mff.cuni.cz/pipermail/nswi080/attachments/20130409/629e12dd/attachment.html>


More information about the NSWI080 mailing list