sobota, lipca 03, 2010

SLA Real-Time (Linux x86)

Napiszmy sobie prosty i szybki serwerowy kod Javy, który powinien wyrabiać się po stronie klienta w milisekundach (w idealnych warunkach czas działania zależy od czasu stosu TCP/IP) - serwer WWW zwracający aktualną datę.


Do tego mały zły programik w C zużywający sporo cykli procesora tudzież alokujący sporo pamięci (system operacyjny przez niego będzie używał swapa)



Mamy zasymulowany obciążony serwer aplikacyjny. Programy napisane w Javie i C działają na kontach różnych użytkowników.

Na wykresie widzimy system ze zwykłą Javą 6.0 od Sun-a. Konfiguracja out-of-box. Na osi pionowej czas odpowiedzi serwera JEE w milisekundach.


Wprowadźmy teraz limity (/etc/security/limits.conf):

user hard data 200000
user hard memlock 200000
user hard cpu 50

Jest lepiej.


A to Java RT. Pamięć używana przez maszynę wirtualną jest zablokowana za pomocą funkcji mlockall() i nie może być przeniesiona do swapa.


W rezultacie mały zły program w C jest zabity przez OOM-killera.



Spójrzmy jeszcze na JRockit-a RT 4.0 (RT oznacza deterministyczny garbage collector). Prawie idealnie. Gdyby poprzez bibliotekę w C i JNI zawołać mlockall, mielibyśmy wyniki spełniające SLA RT.


WebSphere Real-Time (IBM J9 w/ Metronome GC):


0 komentarze: