[Session 1] Tunning Nginx, Target 1juta request per second pada server murah seharga 5$/bulan.

By | 24 April 2018

Assalamu ‘alaikum, selamat pagi, …….

heemm….

Alhamdulillah, saya sehat lagi. Beberapa hari ini, saya tidak bisa atau susah untuk bangun dari tempat tidur. Pinggang saya sakit. Stess otot. Tidak bergerak bebas, disebabkan beberapa hari lalu saya langsung ngangkat beban 45 kiloan. Akhirnya, sayapun ambrol. 😀

Oke,  cukup saya curhatnya ya. Kali ini saya mencoba membuat testing nginx step by step sebagai simulai beban. Ini saya lakukan karena terinspirasi pada sakit saya beberapa hari lalu. 🙂

1. Persiapan

Saya membeli2 vps. sama-sama Vps murah meriah seharga 0.007USD/jam. Iya, tarifnya memang perjam. Kalau dipakai selama 1 bulan, maka dianggap 5USD saja alias 5USD/Bulan. speknya?

berikut spesifikasi kedua vps saya.

  • Core: 1 CPU
  • RAM: 1 GB
  • Penyimpanan: 25 GB
  • Traffik: 1TB
  • Harga: 0.007Usd/jam
  • Provider: DO.

Saya cukup kagum dengan provider ini. bagaimana tidak, setiap pengguna baru, bisa dapet 10USD Gratis. Dan bisa untuk beli 10VPS sekaligus dengan spesifikasi minimal seperti diatas. keren sekali. Kalau mau dapet 10USD-nya, daftar dari sini aja >> Digital Ocean.

Saya sudah memesan 2 buah vps. Estimasi biaya untuk testing ini, mungkin hanya membutuhkan 0.042 USD saja untuk 2 vps (3jam * 2 vps * 0.007=0.042USD). Karena setelah saya gunakan untuk testing, saya akan destroy. Maklum, penghematan bonus. 😀

Kedua OS saya pilih CentOS 6.9. Untuk saat ini, saya tidak memperhatikan sisi OS. Mungkin lain kali, saya akan testing antar OS. Kedua vps saya berikan nama vpsserver dan vpsclient.

2. Install nginx dan vegeta.

saya mengintall nginx dan menjalankannya di vpsserver. Tanpa menyentuh config apapun dan tanpa menginstall apapun selain nginx!   [tanpa php tanpa mysql juga atau lainnya]

pada vpsclient saya menginstall vegeta. Cara installnya gampang aja, tinggal download di sini ( Realese Vegeta ) dan extract. Untuk tutorial lengkap tentang vegeta dapat dilihat di sini Homepage Vegeta.

3. Testing pertama kali(mencari nilai pendekatan RPS fresh nginx)

untuk kali ini saya mencoba untuk testing pertama kali. yaitu merequest home page vpsserver yang hanya berisi wellcome dari nginx. 🙂

testing kali ini yaitu dengan teknik Bisection Method. Dimana kita akan menentukan suatu nilai besar(10.000rps) sebagai titik acuan. jika nilai ini gagal, maka akan dibagi 2. jika berhasil, akan dikali 2. dan begitu seterusnya.

berikut template command testinya:

echo “GET http://128.199.170.113/” | ./vegeta attack -duration=20s -rate=10000 -connections=1000000 | tee results.bin | ./vegeta report

penjelasan:

  • http://128.199.170.113/ adalah ip vpsserver
  • -rate=10000 adalah nilai rps yang mau dipakai.

oke, kita testing denga speed 10.000rps.

hasilnya sebagai berikut:

Requests [total, rate] 200000, 4769.27
Duration [total, attack, wait] 42.208032027s, 41.935126638s, 272.905389ms
Latencies [mean, 50, 95, 99, max] 1.370442209s, 1.327673976s, 2.659112207s, 2.991906533s, 5.957303976s
Bytes In [total, mean] 12620451, 63.10
Bytes Out [total, mean] 0, 0.00
Success [ratio] 10.30%
Status Codes [code:count] 500:75 200:20598 0:179327
Error Set:
Get http://128.199.170.113/: dial tcp 0.0.0.0:0->128.199.170.113:80: socket: too many open files
500 Internal Server Error

hanya terdapat 10% saja yang  berhasil. 😀 oke, kita akan coba setengahnya.

echo “GET http://128.199.170.113/” | ./vegeta attack -duration=20s -rate=5000 -connections=1000000 | tee results.bin | ./vegeta report

hasilnya:

Requests [total, rate] 100000, 4825.41
Duration [total, attack, wait] 22.65577726s, 20.723645248s, 1.932132012s
Latencies [mean, 50, 95, 99, max] 497.564497ms, 477.973348ms, 883.587382ms, 995.536532ms, 3.303289533s
Bytes In [total, mean] 24975822, 249.76
Bytes Out [total, mean] 0, 0.00
Success [ratio] 40.78%
Status Codes [code:count] 0:59120 500:102 200:40778
Error Set:
Get http://128.199.170.113/: dial tcp 0.0.0.0:0->128.199.170.113:80: socket: too many open files
500 Internal Server Error

Okeee…, kita sudah menemukan sedikit perkembangan. dengan test RPS 5.000, kita mendapati 40.78%. Tentu persentase ini sangat rendah!. kita akan coba menggunakan setengahnya lagi:

echo “GET http://128.199.170.113/” | ./vegeta attack -duration=20s -rate=2500 -connections=1000000 | tee results.bin | ./vegeta report

Hasilnya:

Requests [total, rate] 50000, 2499.67
Duration [total, attack, wait] 20.02641899s, 20.002672903s, 23.746087ms
Latencies [mean, 50, 95, 99, max] 1.988745ms, 471.704µs, 11.260142ms, 26.511172ms, 115.850784ms
Bytes In [total, mean] 30600000, 612.00
Bytes Out [total, mean] 0, 0.00
Success [ratio] 100.00%
Status Codes [code:count] 200:50000
Error Set:

Nah!, untuk rps 2.500 kita berhasil 100%. Namun, kita mesti menaikkan nilai ini. karena saya tidak yakin ini nilai maksimalnya. kita naikkan sengah dari 2.500 yaitu ditambah 1.250. alah, kita bulatin 4.000 aja ya. 😀

Hasilnya:

Requests [total, rate] 80000, 4000.05
Duration [total, attack, wait] 20.005246909s, 19.999749328s, 5.497581ms
Latencies [mean, 50, 95, 99, max] 19.675493ms, 803.509µs, 151.798015ms, 228.183029ms, 427.827732ms
Bytes In [total, mean] 48960000, 612.00
Bytes Out [total, mean] 0, 0.00
Success [ratio] 100.00%
Status Codes [code:count] 200:80000
Error Set:

Jreng jreeeenngg….., 4.000rps masih anteng woooyy…, 😀 tadi 5.000 gak kuat, 4.000 jalan normal. kita akan mengetes gimana kalau kita tambah 500. inget, kita pakai methode apalah itu dia atas, pret. :-D. saya test dulu ya…

Nah, berikut hasilnya:

Requests [total, rate] 90000, 4499.99
Duration [total, attack, wait] 20.010845815s, 20.000041879s, 10.803936ms
Latencies [mean, 50, 95, 99, max] 91.585693ms, 27.424898ms, 323.637434ms, 436.749034ms, 3.264101988s
Bytes In [total, mean] 53713851, 596.82
Bytes Out [total, mean] 0, 0.00
Success [ratio] 97.51%
Status Codes [code:count] 200:87763 0:2222 500:15
Error Set:
Get http://128.199.170.113/: dial tcp 0.0.0.0:0->128.199.170.113:80: socket: too many open files
500 Internal Server Error

Kita akan terus cari. kita test diangka 4.250!

Berikut hasilnya:

Requests [total, rate] 85000, 4248.84
Duration [total, attack, wait] 20.017572366s, 20.005464s, 12.108366ms
Latencies [mean, 50, 95, 99, max] 23.304797ms, 988.86µs, 164.139989ms, 226.520568ms, 357.743061ms
Bytes In [total, mean] 52020000, 612.00
Bytes Out [total, mean] 0, 0.00
Success [ratio] 100.00%
Status Codes [code:count] 200:85000
Error Set:

nah, saya kira ini sudah cukup. oh, bentar, kita akan menaikkan waktu testingnya. kira2 bertahan berapa lama jika kita gunakan 4.250rps dalam rentang waktu tertentu. saya akan mencoba 1, 2,3,5 menit saja. 🙂

berikut hasilnya:

1 menit:

Requests [total, rate] 255000, 4250.00
Duration [total, attack, wait] 1m0.007224128s, 59.999984548s, 7.23958ms
Latencies [mean, 50, 95, 99, max] 27.949938ms, 1.417034ms, 175.60762ms, 278.485021ms, 2.382272238s
Bytes In [total, mean] 155859744, 611.21
Bytes Out [total, mean] 0, 0.00
Success [ratio] 99.87%
Status Codes [code:count] 0:319 500:12 200:254669
Error Set:
Get http://128.199.170.113/: dial tcp 0.0.0.0:0->128.199.170.113:80: socket: too many open files
500 Internal Server Error

2 menit(saya turunin menjadi 4.100):

Requests [total, rate] 492000, 4100.02
Duration [total, attack, wait] 2m0.005487056s, 1m59.999539363s, 5.947693ms
Latencies [mean, 50, 95, 99, max] 14.487711ms, 968.09µs, 82.446636ms, 204.57698ms, 505.951096ms
Bytes In [total, mean] 301031492, 611.85
Bytes Out [total, mean] 0, 0.00
Success [ratio] 99.98%
Status Codes [code:count] 200:491879 0:113 500:8
Error Set:
Get http://128.199.170.113/: dial tcp 0.0.0.0:0->128.199.170.113:80: socket: too many open files
500 Internal Server Error

3 menit(saya turunin ke 4.000):

Requests [total, rate] 720000, 3999.92
Duration [total, attack, wait] 3m0.012998507s, 3m0.003512081s, 9.486426ms
Latencies [mean, 50, 95, 99, max] 9.078745ms, 862.877µs, 34.94081ms, 132.606849ms, 387.703171ms
Bytes In [total, mean] 440640000, 612.00
Bytes Out [total, mean] 0, 0.00
Success [ratio] 100.00%
Status Codes [code:count] 200:720000
Error Set:

5 menit:

Requests [total, rate] 1200000, 3999.95
Duration [total, attack, wait] 5m0.011138031s, 5m0.003450917s, 7.687114ms
Latencies [mean, 50, 95, 99, max] 10.394115ms, 912.555µs, 46.579297ms, 140.578211ms, 363.398829ms
Bytes In [total, mean] 734400000, 612.00
Bytes Out [total, mean] 0, 0.00
Success [ratio] 100.00%
Status Codes [code:count] 200:1200000
Error Set:

10 jam:

Requests [total, rate] 144000000, 4000.00
Duration [total, attack, wait] 10h0m0.09305428s, 10h0m0.011349306s, 81.704974ms
Latencies [mean, 50, 95, 99, max] 31.967132ms, 3.252981ms, 114.927023ms, 208.4318ms, 5.637413116s
Bytes In [total, mean] 87942273364, 610.71
Bytes Out [total, mean] 0, 0.00
Success [ratio] 99.79%
Status Codes [code:count] 0:302971 500:736 200:143.696.293
Error Set:
Get http://128.199.170.113/: dial tcp 0.0.0.0:0->128.199.170.113:80: socket: too many open files
500 Internal Server Error

Cukup menarik, selama 10jam saya uji dengan 4.000 rps, 0.21% saya yang gagal. itupun,  belum tentu karena vpsserver yang down. mungkin saja vpsclient yang ngambek. saya kan memperbanyak vpsclient, agar yakin yang diuji adalah vpsserver-nya bukan malah vpsclient-nya. 😀

Kesimpulan sementara:

Hanya menggunakan nginx tanpa aplikasi pendungkung(php, mysql, webapss lainnya) dan tanpa prose tunning, nginx mampu menampilkan dengan stabil halaman wellcome-nya selama 5menit di angka 4.000rps!

Target 1juta masih GAGAL!

[kita akan mencoba lagi pada session selanjutnya…]

Note: “jika anda ingin mencoba testing juga atau ingin mencoba vps murah bisa membeli di Digital Ocean. Anda bisa mendapatkan deposit senilai 10USD Gratis dan dapat dibelanjakan 10 VPS sekaligus. Register di sini >> Digital Ocean << mumpung PROMO ini berakhir!”

2 thoughts on “[Session 1] Tunning Nginx, Target 1juta request per second pada server murah seharga 5$/bulan.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.