graalvm native image - load tests
xurl projesinin native image’ini olusturup calistirmayi basarmis, kucuk bir load test yapma ihtiyacindan bahsetmistik.
locust framework’u kullanarak minimal bir load test case’i hazirladim. locust, python ile gelistirilmis, yeterince guclu ve yetenekli, kolay erisilebilir, ucretsiz bir load test framework’u. diger secenekler ile kiyaslayip kendisiyle hizlica bir cozum uretebilecegimi dusunerek tercih ettim.
locust’un distributed load generating gibi muhtesem yetenekleri var, olabilir. bizim paramiz yok. bu nedenle testleri local ortamda gerceklestirdik.
test ortami
testleri maalesef local ortamda gerceklestirdim. ortamimiz su speclere sahip:
- amd ryzen 5 3600x cpu
- 32gb ram
- archlinux
ayni makine uzerinde postgres, redis, app instancelerimiz (ayrica load testing kendisi) herhangi bir resource management olmadan kosuyor.
concurrent user sayisini da belirlerken ilk fail gorecek rakami bulmaya calistim ki rakamimiz: 50
. concurrent 50 useri sisteme gonderince 1-2 request fail oldu, bu nedenle rakami arttirmadim. tum user’lari ayni anda gonderiyoruz, rump up yok.
son dakikada merak edip uber-jar’i openjdk-11 uzerinde de kosup test ettim.
sonuclar
app@env | reqs/s | reqs | fails | avg | median | max | p50 | p90 | p99 | p99.99 |
---|---|---|---|---|---|---|---|---|---|---|
jar@openjdk | 730.07 | 218911 | 9 | 68 | 9 | 1399 | 9 | 160 | 430 | 900 |
jar@graalvm | 740.72 | 222135 | 2 | 67 | 9 | 1175 | 9 | 150 | 440 | 900 |
native-image | 762.58 | 228692 | 2 | 65 | 10 | 1246 | 10 | 150 | 400 | 840 |
minimal ortamda hazirlanan bu load test sonuclarina baktiginizda cok buyuk fark olmasa da performans katkisini gozlemlemek mumkun. ancak cloud ortaminda bir infra kurulup yeterli sayida instance uzerinde load testing yapildiginda makasin acilacagina emin olabilirsiniz.
bu bitcoin adresine gereken miktarda btc yolladiginiz durumda istediginiz testleri yapar sonuclari sizinle paylasirim: bc1qx3gs5jskr3utfasxzkh00vf0msncc882kdd5f3