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):