Dette dokuement beskriver performance test og analyse for
For begge test gælder følgende:
Udover det fremsatte performance krav for notification broker henholdsvis pull point på svartid, er der en række andre punkter som bør analyseres for at vurdere servicens sundhed.
Følgende punkter bliver derfor undersøgt:
Da NAS servicene ikke skriver til disk selv, bliver io til disk ikke undersøgt. Der er ikke målinger på database serveren (MariaDB). Der er målinger fra Kafka serverne.
Undersøgelserne foregår vha. de forskellige log filer, som er genereret under performance testen. De følgende afsnit gennemgår de vigtigste tal fra disse filer:
Hver kørsel/iteration (øgning af belastning) har en start og slut tid. Filerne access.log og jstat.log indeholder tidstempler. Dette muliggør at de kan mappes til en given iteration. Filen vmstat har ikke tidstempel. Men da den er startet samtidig med jstat loggen og logintervallet er kendt på 10 sekunder, kan iterationernes placering i data beregnes. Docker stats loggen har hverken tidsstempel eller fast logninginterval, hvorfor tallene/graferne kun kan bruges som en generel betragtning over hele test perioden.
I det nedenstående kan man klikke på de enkelte grafer for større billede. De enkelte iterationer er tegnet ind som lodrette mørke streger; 2 streger per iteration (start og slut tidspunkt).
Performance testen består af en række kald til skrivning af adviseringer.
Testen involverer følgende komponenter
Performancekravene er som følger:
Kommentarer til forudsætninger og krav
Performance testen er afviklet på følgende måde
Se iøvrigt NAS2 test vejledning afsnit performance test for detaljer.
De rå test resultater er vedhæftet denne side (nas-nb-perftest.tgz)
Der er kun kigget på performance målinger/tal, der vedrører selve notification broker servicen.
JMeter hoved filen beskriver overordnet testens resultet.
Her kan kan ses, at der er kørt 5 iterationer med test, deres tidsinterval og throughput for hver.
Iteration | Tråde | Nodes | Starttid | Sluttid | Throughput |
|---|---|---|---|---|---|
| 1 | 5 | 2 | 2019-10-07_11-21-21 | 2019-10-07_11-36-25 | 399.36 kald per sekund |
| 2 | 8 | 2 | 2019-10-07_11-36-54 | 2019-10-07_11-51-57 | 523.03 kald per sekund |
3 | 8 | 3 | 2019-10-07_11-52-27 | 2019-10-07_12-07-31 | 719.42 kald per sekund |
| 4 | 8 | 4 | 2019-10-07_12-08-06 | 2019-10-07_12-23-09 | 910.14 kald per sekund |
| 5 | 8 | 5 | 2019-10-07_12-24-30 | 2019-10-07_12-39-33 | 1010.45 kald per sekund |
Det fremgår også af filen, at den endelige måling af throughput er 1010.45 kald per sekund.
Samt at fejlprocentet på den fulde kørsel er 0 %.
Kravet til testen er, at der skal køres med 10 adviseringer i sekundet. NSP's test framework fungerer med en bestemt belastning i testen som gradvis øges. I første iteration har testen kørt med 400 kald per sekund, hvilket ligger højt over kravet til testen.
Derfor konkluderes det, at ud fra JMeter loggens data, er performance kravets forudsætning om 10 adviseringer så rigeligt overholdt.
Denne log findes for hver applikations server (docker container).
Her findes data for hvert enkelt kald, der er lavet til notification broker services, herunder hvor lang tid et kald har taget (Duration). Ved at kigge på de kald, der er foretaget til servicen kan den gennemsnitlige tid et kald tager beregnes.
Følgende tabel viser en række beregnede data fra access loggen fordelt på applikations server (container), test iteration og http kode. Nederst i tabellen er tallene for hver applikations server lagt sammen. Test iteration er beregnet ved at sammenligne tidstempel fra access log med start og sluttidspunktet for iterationen. Http koden findes i access loggen (kald returnerede med fejl (500) eller ingen fejl(200)).
De beregnede data er antal kald, kald per sekund i gennemsnit (hver iteration er 900 sekunder), gennemsnitlig tidsforbrug per kald i millisekunder samt antal kalder større eller lig med 500 millisekunder.
| Applikations server | Iteration | HttpCode svar | Antal kald | Kald per sekund | Tidsforbrug (ms) | Kald >= 500 ms |
|---|---|---|---|---|---|---|
| docker01.bo.stage.nsp.netic.dk | 1 | 200 | 179.830 | 199,8 | 9 | 38 (0 %) |
| 2 | 200 | 235.357 | 261,5 | 11 | 70 (0 %) | |
| 3 | 200 | 324.407 | 360,5 | 13 | 87 (0 %) | |
| 4 | 200 | 409.904 | 455,4 | 14 | 117 (0 %) | |
| 5 | 200 | 454.973 | 505,5 | 16 | 179 (0 %) | |
| docker02.bo.stage.nsp.netic.dk | 1 | 200 | 179.831 | 199,8 | 10 | 30 (0 %) |
| 2 | 200 | 235.356 | 261,5 | 11 | 69 (0 %) | |
| 3 | 200 | 324.406 | 360,5 | 13 | 87 (0 %) | |
| 4 | 200 | 409.904 | 455,4 | 14 | 95 (0 %) | |
| 5 | 200 | 454.982 | 505,5 | 15 | 158 (0 %) |
Udtræk af svartid og antal kald fordelt over testens løbetid vises i følgende grafer:


Data serier i grafen er:


Data serier i grafen er:
Af tabel og grafer fremgår det, at jo flere nodes og tråde (disse øges per iteration) jo flere kald kommer der igennem per sekund. Tallene svarer overens (summen for de 2 servere) med de tal JMeter kom frem til som throughput.
Det ses (tydligst i tabellen), at jo flere nodes/tråde jo højere bliver svar tiden. Performance kravet er under 250 ms i gennensnit ved 10 adviseringer per sekund. Ovenstående tabel viser, at ved iteration 1 er svartiden 9 ms, og tidligere fremgik det at througput her var 400 kald per sekund.
Tabellen ovenfor viser også, at det antal kald, der tager mere end 500 ms er så lavt, at kravet med, at 95 % skal være under 500 ms, er overholdt.
Vi er inden for performance kravene.
Denne log findes for hver applikations server (docker container). Den viser resultatet af kommandoen vmstat
Udtræk omkring cpu fra denne log vises i de følgende grafer.


Data serier i grafen er:
Man kan se at cpuIdle og cpuNonKernel påvirkes som servicen presses mere. cpuIdle svinger oftere mod 0 i de sidste 2 iterationer. Det er dog vigtigt at bemærke at det kun er kortvarigt og cpyIdle går op igen.
Der er intet negativt at bemærke omkring cpu forbruget.
Denne log findes for hver applikations server (docker container). Loggen viser resultatet af kommandoen jstat. Jstat siger noget om, hvordan JVM'en har det.
Udtræk omkring hukommelse og garbage collection fra denne log vises i de følgende grafer.
Data serier i grafen er:
Det kan være lidt svært at se graferne for full garbage collection (FGC). Kigger man nærmere på datagrundlaget bag graferne, ses det, at der er kørt ikke er full garbage collection for servicen under testen.
Der køres også ofte garbage collection på den yngre hukommelse, hvilket holder HeapU - yngre hukommelses forbrug - nede så den kun svinger inden for et konstant interval.
Den yngre forbrugte hukommelse eskalerer ikke. Garbage collecteren gør sit arbejde.
Denne log findes for hver applikations server (docker container). Loggen viser resultatet af kommandoen docker stats. Docker stats siger noget om, hvordan containeren forbruger sine ressourcer.
Udtræk omkring hukommelse, cpu netværkstrafik vises i følgende grafer.
Hukommelse:
Data serier i grafen er:
Den forbrugte hukommelse er svagt stigende, men da jstat statistikken ikke indikerer at selve applikationen øger forbruget af hukommelse, anses det ikke som et problem.
Cpu og hukommelse procent:
Data serier i grafen er:
Servicen viser et svagt stigende forbrug af hukommelse, men som skrevet for forrige graf anses det ikke som et problem. Den envendte cpu er stigende som servicen bliver presset.
Netværk:
Data serier i grafen er:
TBD
Intet at bemærke.
De følgende grafer er lavet på baggrund af vmstat data på kafka serveren.



Data serier i grafen er:
Der er et meget svagt fald i Cpu Idle som testen skrider frem. Men den ligger generelt højt, så der er masser af cpu tid til rådighed.



Data serier i grafen er:
Skrivning øges som kaldende intensiveres. Læsning er meget begrænset, hvilket må betyde at data læses fra cachen.
Der er intet at bemærke som kan påvirke nas servicens performance i negativ retning.
Performance testen består af en række kald til læsning af pull points.
Testen involverer følgende komponenter
Performancekravene er som følger:
Kommentarer til forudsætninger og krav
Performance testen er afviklet på følgende måde
Se iøvrigt NAS2 test vejledning afsnit performance test for detaljer.
De rå test resultater er vedhæftet denne side (nas-pp-perftest.tgz)
Der er kun kigget på performance målinger/tal, der vedrører selve pull point servicen.
JMeter hoved filen beskriver overordnet testens resultet.
Her kan kan ses, at der er kørt 4 iterationer med test, deres tidsinterval og throughput for hver.
Iteration | Tråde | Nodes | Starttid | Sluttid | Throughput |
|---|---|---|---|---|---|
| 1 | 5 | 2 | 2019-10-04_14-25-44 | 2019-10-04_14-40-50 | 53.48 kald per sekund |
| 2 | 8 | 2 | 2019-10-04_14-41-29 | 2019-10-04_14-56-35 | 90.4 kald per sekund |
3 | 11 | 2 | 2019-10-04_14-57-15 | 2019-10-04_15-12-21 | 109.17 kald per sekund |
| 4 | 11 | 3 | 2019-10-04_15-13-01 | 2019-10-04_15-28-08 | 111.07 kald per sekund |
Det fremgår også af filen, at den endelige måling af throughput er 111.07 kald per sekund.
Samt at fejlprocentet på den fulde kørsel er 0 %.
Kravet til testen er, at der skal køres med 20 kald til pull point servicen hver 10. sekund dvs. 2 per sekund. NSP's test framework fungerer med en bestemt belastning i testen som gradvis øges. I første iteration har testen kørt med 53 kald per sekund, hvilket ligger højt over kravet til testen.
Derfor konkluderes det, at ud fra JMeter loggens data, er performance kravets forudsætning om 2 kald så rigeligt overholdt.
Denne log findes for hver applikations server (docker container).
Her findes data for hvert enkelt kald, der er lavet til notification broker services, herunder hvor lang tid et kald har taget (Duration). Ved at kigge på de kald, der er foretaget til servicen kan den gennemsnitlige tid et kald tager beregnes.
Følgende tabel viser en række beregnede data fra access loggen fordelt på applikations server (container), test iteration og http kode. Nederst i tabellen er tallene for hver applikations server lagt sammen. Test iteration er beregnet ved at sammenligne tidstempel fra access log med start og sluttidspunktet for iterationen. Http koden findes i access loggen (kald returnerede med fejl (500) eller ingen fejl(200)).
De beregnede data er antal kald, kald per sekund i gennemsnit (hver iteration er 900 sekunder), gennemsnitlig tidsforbrug per kald i millisekunder samt antal kalder større eller lig med 500 millisekunder.
| Applikations server | Iteration | HttpCode svar | Antal kald | Kald per sekund | Tidsforbrug (ms) | Kald >= 10.000 ms |
|---|---|---|---|---|---|---|
| docker01.bo.stage.nsp.netic.dk | 1 | 200 | 24.075 | 26,8 | 148 | 0 (0 %) |
| 2 | 200 | 40.705 | 45,2 | 136 | 0 (0 %) | |
| 3 | 200 | 49.131 | 54,6 | 141 | 0 (0 %) | |
| 4 | 200 | 50.034 | 55,6 | 141 | 0 (0 %) | |
| docker02.bo.stage.nsp.netic.dk | 1 | 200 | 24.074 | 26,7 | 151 | 0 (0 %) |
| 2 | 200 | 40.705 | 45,2 | 142 | 0 (0 %) | |
| 3 | 200 | 49.131 | 54,6 | 148 | 0 (0 %) | |
| 4 | 200 | 50.036 | 55,6 | 148 | 0 (0 %) |
Udtræk af svartid og antal kald fordelt over testens løbetid vises i følgende grafer:


Data serier i grafen er:


Data serier i grafen er:
Af tabel og grafer fremgår det, at jo flere nodes og tråde (disse øges per iteration) jo flere kald kommer der igennem per sekund. Tallene svarer overens (summen for de 2 servere) med de tal JMeter kom frem til som throughput.
Derimod har svar tiden ved en øgning af nodes/tråde en nogenlunde konstant gennemsnits svartid. Den øges ikke som det ses ved notification broker testen.
Performance kravet er under 5.000 ms i gennensnit ved 2 kald per sekund. Ovenstående tabel viser, at ved iteration 1 er svartiden ca 150 ms, og tidligere fremgik det at througput her var 153 kald per sekund.
Tabellen ovenfor viser også, at det antal kald, der tager mere end 10.000 ms er 0, og dermed er kravet med, at 95 % skal være under 10.000 ms, overholdt. Og dermed også kravet om 99 % skal være under 20.000 ms.
Vi er inden for performance kravene.
Ved at kigge i access loggen for notification broker under pull point testen, kan kald til notification broker ses.


Data serier i grafen er:
Hver minut kaldes hver server ca. 1200 gange.
Kigger man ned i access loggen kan fordelingen af pull point trækkes ud.
Følgende tabel viser antal af pull point fordelt per iteration, hvor de er ligeligt fordelt.
| Pull point | iteration 1 | iteration 2 | iteration 3 | iteration 4 |
| pullPoint0001 | 1789 | 1790 | 1789 | 1790 |
| pullPoint0002 | 1789 | 1790 | 1789 | 1790 |
| pullPoint0003 | 1789 | 1790 | 1789 | 1790 |
| pullPoint0004 | 1789 | 1790 | 1789 | 1790 |
| pullPoint0005 | 1789 | 1790 | 1789 | 1790 |
| pullPoint0006 | 1789 | 1788 | 1789 | 1790 |
| pullPoint0007 | 1789 | 1790 | 1788 | 1790 |
| pullPoint0008 | 1789 | 1790 | 1788 | 1790 |
| pullPoint0009 | 1789 | 1790 | 1788 | 1790 |
| pullPoint0010 | 1788 | 1790 | 1788 | 1790 |
| pullPoint0011 | 1788 | 1790 | 1788 | 1790 |
| pullPoint0012 | 1788 | 1790 | 1788 | 1790 |
| pullPoint0013 | 1788 | 1790 | 1788 | 1790 |
| pullPoint0014 | 1788 | 1789 | 1788 | 1790 |
| pullPoint0015 | 1788 | 1789 | 1788 | 1790 |
| pullPoint0016 | 1788 | 1787 | 1788 | 1789 |
| pullPoint0017 | 1788 | 1789 | 1788 | 1790 |
| pullPoint0018 | 1788 | 1785 | 1788 | 1789 |
| pullPoint0019 | 1788 | 1789 | 1788 | 1789 |
| pullPoint0020 | 1788 | 1789 | 1788 | 1789 |
| Total | 35769 | 35785 | 35766 | 35796 |
Følgende tabel viser antal af pull point fordelt per sekuend på 6 på hinanden tilfældige sekunder på tværs af server (stik prøve). Fordelingen er ligeligt fordelt med enkelt afvigelse der justeres i sekundet efter.
| Pull point | 14:25:59 | 14:26:00 | 14:26:01 | 14:26:02 | 14:26:03 | 14:26:04 |
| pullPoint0001 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0002 | 2 | 2 | 0 | 4 | 2 | 2 |
| pullPoint0003 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0004 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0005 | 0 | 4 | 2 | 2 | 2 | 2 |
| pullPoint0006 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0007 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0008 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0009 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0010 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0011 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0012 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0013 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0014 | 2 | 2 | 0 | 4 | 2 | 2 |
| pullPoint0015 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0016 | 0 | 4 | 2 | 2 | 2 | 2 |
| pullPoint0017 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0018 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0019 | 2 | 2 | 2 | 2 | 2 | 2 |
| pullPoint0020 | 2 | 2 | 2 | 2 | 2 | 2 |
Kravet til baggrundsbelastningen for testen er, at der skal laves 40 adviseringer per sekund fordelt ligeligt på 20 udvalgte pullpoints. Det svarer til 2400 kald per minut, hvilket ovenstående grafer viser er sket fordelt på 2 servere.
Desuden rammer kaldene ligeligt de 2 pull points per iteration og per sekund i stikprøven.
Det konkluderes ud fra ovenstående, at ud fra access loggens data for notification broker, er performance kravets forudsætning om mængden af baggrundsbelastning overholdt.
Denne log findes for hver applikations server (docker container). Den viser resultatet af kommandoen vmstat
Udtræk omkring cpu fra denne log vises i de følgende grafer.


Data serier i grafen er:
De dataserierne i graferne er meget stabile, med et par enkelte peaks.
Der er intet negativt at bemærke omkring cpu forbruget.
Denne log findes for hver applikations server (docker container). Loggen viser resultatet af kommandoen jstat. Jstat siger noget om, hvordan JVM'en har det.
Udtræk omkring hukommelse og garbage collection fra denne log vises i de følgende grafer.


Data serier i grafen er:
Det kan være lidt svært at se graferne for full garbage collection (FGC). Kigger man nærmere på datagrundlaget bag graferne, ses det, at der er kørt ikke er full garbage collection for servicen under testen.
Der køres også ofte garbage collection på den yngre hukommelse, hvilket holder HeapU - yngre hukommelses forbrug - nede så den kun svinger inden for et konstant interval.
Den yngre forbrugte hukommelse eskalerer ikke. Garbage collecteren gør sit arbejde.
Denne log findes for hver applikations server (docker container). Loggen viser resultatet af kommandoen docker stats. Docker stats siger noget om, hvordan containeren forbruger sine ressourcer.
Udtræk omkring hukommelse, cpu netværkstrafik vises i følgende grafer.
Hukommelse:


Data serier i grafen er:
Den forbrugte hukommelse er meget stabil,
Cpu og hukommelse procent:


Data serier i grafen er:
Servicen viser et stabilt forbrug af hukommelse. Den envendte cpu er svagt stigende som servicen bliver presset.
Netværk:


Data serier i grafen er:
TBD
De følgende grafer er lavet på baggrund af vmstat data på kafka serveren.



Data serier i grafen er:
Der er et meget svagt fald i Cpu Idle som testen skrider frem. Men den ligger meget højt generelt, så der er masser af cpu tid til rådighed.



Data serier i grafen er:
Der er en jævn skriving til disk som testen skrider frem. Dette skyldes den konstante baggrundsbelastning fra notification broker. Læsning er meget begrænset, hvilket må betyde at data læses fra cachen.
Der er intet at bemærke som kan påvirke nas servicens performance i negativ retning.
Efter at have analyseres data fra performance testen kan følgende trækkes frem:
Derudover kan nævnes, at de 3 kald der gik galt under testen og returnerede http 500, fejlede pga. manglende svar fra en af de 3 MSB service kald: Service Unavailable.