Apache vs Nginx

Ditulis pada tanggal 08 Mei 2014

Sudah berapa kali dan dari mana saja kita mendengar bahwa nginx + php-fpm jauh lebih baik daripada apache + mod_php5? "Jauh lebih baik" di sini biasanya didefinisikan sebagai hasil akhir di mana nginx bisa melayani jumlah http request jauh lebih banyak daripada apache. Kemudian ada juga klaim bahwa php fpm yang listen di tcp socket performa kerjanya lebih buruk daripada apabila dijalankan di unix socket. Akhirnya tangan saya cukup gatal juga, kemudian saya melakukan perbandingan, dan demikianlah cerita dimulai.

Aplikasi yang digunakan untuk percobaan ini dibangun menggunakan PHP dengan database PostgreSQL. Kerja script yang saya coba adalah mengambil beberapa ratus record dari database, kemudian mengirimkan hasil htmlnya ke browser. Lokasi database terpisah dari server web. Server web yang digunakan punya RAM 4GB, harddisk SAS 15k 136GB, dan 8 processor cores. Php-fpm berjalan menggunakan unix socket. Segala konfig apache dan ngnx standar saja, hanya mengubah timeout untuk keepalive menjadi 3 detik. OS server yang digunakan adalah Ubuntu 12.04 tanpa custom repo.

Test beban dilakukan dengan menggunakan siege. Bisa juga menggunakan ab, prinsipnya sama saja. Siege dieksekusi menggunakan script bash dengan concurrency 150 selama sepuluh detsik, diulang sepuluh kali. Saya beri jeda lima detik untuk masing-masing percobaan. Siege dijalankan dari komputer saya, berada pada subnet yang sama dengan server. Berikut adalah script eksekusi siege:


#!/bin/bash
for (( a = 0; a < 10; a++ )) {
    siege -t 10S -c 150 http://server/list.php
    sleep 5;
}

Hasilnya saya masukkan ke librecalc kemudian saya buat grafik untuk data transaction dan concurrency. Berikut grafiknya.

Intermezo: Garis kuning menggambarkan hasil pengukuran kerja aplikasi di server aslinya. Aplikasi ini awalnya dipasang di MS Windows 2008 + Apache 2.

Kemudian iseng-iseng saya pasang php5-apc untuk melihat selisihnya. Untuk yang di Windows sudah tidak ikut test lagi, toh ya awalnya sekedar untuk iseng. Berikut grafiknya.

Lumayan, rata-rata angkanya naik sekitar dua kali lipat. Rasanya cukup banyak lah itu. Tampak juga bahwa pada kedua grafik di atas bahwa nginx bekerja sedikit lebih baik daripada apache.

Percobaan berlanjut, angka -c saya naikkan 50 per percobaan. Dari yang awalnya 150 naik menjadi 200, 250, 300, sampai 350. Di angka 350 ini baik nginx dan apache sama-sama jatuhnya. Bedanya pada apache tidak ada request yang gagal (HTTP response code > 400) sedangkan pada nginx gagalnya banyak, kode HTTP 502. Baca-baca di google dan para tetangganya, dapet info bahwa untuk request dalam jumlah yang sangat besar, unix domain socket tidak sestabil tcp socket. Ok, tapi ya memang kalau ditest menggunakan -c 350, rasanya ya lebay. Maaf, yang 350 sengaja tidak saya bikin grafiknya.

Dan kemudian percobaan berlanjut. Percobaan selanjutnya saya membandingkan 4 kombinasi yaitu:

  1. Test 01: Nginx, unix socket, listenbacklog default
  2. Test 02: Nginx, unix socket, listenbacklog 128
  3. Test 03: Nginx, tcp socket
  4. Test 04: Apache mod_php5

Di sini saya sengaja bertahan di angka -c 150. Saya membayangkan bahwa untuk ukuran aplikasi ini, jumlah akses kongkuren 150 secara terus menerus sudah cukup besar. Kalau menurut anda kurang besar ya terserah lah, toh ya anda bisa melakukan percobaan sendiri kan? Pada test yang ini saya juga mengutak-atik sysctl.conf, isinya sebagai berikut (referensi tentang ini ada di akhir tulisan).

fs.file-max = 2097152
vm.swappiness = 10
vm.dirty_ratio = 60
vm.dirty_background_ratio = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.ip_local_port_range = 2000 65535
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
net.core.rmem_default = 31457280
net.core.rmem_max = 12582912
net.core.wmem_default = 31457280
net.core.wmem_max = 12582912
net.core.somaxconn = 65536
net.core.netdev_max_backlog = 65536
net.core.optmem_max = 25165824
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.tcp_rmem = 8192 87380 16777216
net.ipv4.udp_rmem_min = 16384
net.ipv4.tcp_wmem = 8192 65536 16777216
net.ipv4.udp_wmem_min = 16384
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 1

Tampaknya memang pengaturan di atas tidak terlalu banyak bermanfaat, tapi biarlah, toh ya tidak tampak bermudharat juga he..he..he.. Berikut grafik hasil testnya.

Nah, di grafik itu terlihat juga kan bahwa andai toh ada beda di antara ketiganya, bedanya tipis. Rasanya kok kalau dari hasil percobaan saya ini, saya ndak bisa lah ngomong bahwa performa A lebih baik dari B. Tiap-tiap konfigurasi pernah ada di atas, pernah juga di bawah. Lagi-lagi, bedanya tipis.

Nah kalau tadi sudah mencoba untuk yang butuh PHP, sekarang sekali saja saya coba untuk mengambil berkas statik, yaitu sebuah gambar PNG. Perintah yang saya gunakan adalah "siege -c10 -r 10 http://server/gambar.png" dan berikut adalah hasilnya.

Hasil test Apache:
Transactions: 100 hits
Availability: 100.00 %
Elapsed time: 7.73 secs
Data transferred: 0.62 MB
Response time: 0.07 secs
Transaction rate: 12.94 trans/sec
Throughput: 0.08 MB/sec
Concurrency: 0.96
Successful transactions: 100
Failed transactions: 0
Longest transaction: 0.37
Shortest transaction: 0.04


Hasil test Nginx:
Transactions: 100 hits
Availability: 100.00 %
Elapsed time: 8.64 secs
Data transferred: 0.62 MB
Response time: 0.07 secs
Transaction rate: 11.57 trans/sec
Throughput: 0.07 MB/sec
Concurrency: 0.76
Successful transactions: 100
Failed transactions: 0
Longest transaction: 0.36
Shortest transaction: 0.04

Terlihat juga untuk satu kali test ini apache menang tipis. Boleh jadi kalau saya lanjutkan testnya bisa naik turun juga, tapi apa ya bener bisa selisih jauh?

Satu hal yang mungkin bedanya bisa diperhitungkan adalah perbedaan konsumsi RAM. Pada percobaan (-c 150) yang saya lakukan, apache bisa memakan RAM hingga 715MB, sedangkan nginx memakan RAM hingga 575MB. Selisih ini lumayan, sekitar 24%. Untuk web yang ditempatkan di VPS dengan RAM kecil boleh jadi ini ada bedanya. Perbedaan lain yang sempat saya perhatikan adalah kecepatan turunnya penggunaan RAM setelah test. Tampaknya nginx melepas RAM Lebih cepat daripada apache, tapi ini saya tidak punya angka pasti. Silakan anda coba sendiri kalau memang tertarik.

Nah, kalau saya simpulkan dari percobaan yang ndak seberapa serius ini, Apache vs Nginx dalam kasus saya bedanya adalah:

  1. Nginx tidak memakan RAM Sebanyak Apache;
  2. Performa keduanya saya anggap sama, beda pun sangat tipis;
  3. Pada jumlah concurrency tinggi (-c 350), php-fpm dengan tcp socket bisa lebih stabil daripada menggunakan unix socket.

Silakan koreksi saya kalau anda rasa ada yang tidak sip.


Silakan juga baca-baca ini:

Timpalan tulisan

galihsatria - 16 May 2014

Jadi kesimpulannya tetep bagusan Apache ya? *ga ngerti baca grafiknya*
Salam suhu... *menjura*

 

KM - 16 May 2014

Aku enggak bilang begitu, tulisan segitu panjang tuh maunya cuma bilang: "Aku nggak tau di bagian mananya nginx + php-fpm lebih cepet daripada apache + mod_php"

 

Ahmad - 19 Oct 2014

mas, itu cara ambil grafiknya gafiknya gimana ya? di buat manual atau otomatis setelah dijalankan command line? thanks

 

nonong - 31 Oct 2014

makasih mas bro share hasil ujinya. saya lagi diskusi agak "panas" dengan teman-teman ttg keunggulan di antara keduanya. hasil uji saya menggunakan ab kurang lebih seperti itu. termasuk hasil uji di https://developers.google.com/speed/pagespeed. bedanya satu menggunakan centos dan lainnya ubuntu tapi keduanya sama-sama sebagai container di openvz dengan pemberian resource sama

 

KM - 4 Dec 2014

@Ahmad: Itu hasil siegenya dimasukkan ke LibreCalc, terus dibikin grafiknya dari situ :D

 

purna irawan - 28 Jan 2015

wah artikelnya mantap om, mw tanya om untuk pemakaian RAM dan CPU om, antara apache dan nginx hemat mana , soalnya kan saya budget rendah buat beli vps :D

 

Wibi - 21 Feb 2015

veryyy good artiel Om :D

 

KM - 23 Feb 2015

@purna: hukum alamnya: makin gemuk orangnya, makin banyak space kursi yang dia pakai :D

 

KM - 23 Feb 2015

@purna: hukum alamnya: makin gemuk orangnya, makin banyak space kursi yang dia pakai :D

 

Fadhly.biz - 11 Jul 2015

Makasi atas infonya

 

Martin Ms - 17 Sep 2015

udah biasa pake apache mass,, :)
bawaan pas beli lepi juga sih

 

ujiloni - 10 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

ezivaufe - 10 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

ikuqhecef - 10 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

awikluex - 10 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

anorewotinacu - 11 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

irosugiraviv - 11 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

okimoloy - 13 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

ulucismejujsu - 13 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

xonocmebowca - 13 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

uzecoavupobk - 13 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

ayabibeihoza - 13 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

iiselqoj - 13 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

eqekofeti - 14 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

eikipfu - 14 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

ausupivoj - 14 Aug 2017

http://20mg-cheapesttadalafil.com/ - 20mg-cheapesttadalafil.com.ankor <a href="http://20mg-cheapesttadalafil.com/">20mg-cheapesttadalafil.com.ankor</a> http://20mg-cheapesttadalafil.com/

 

Timpali tulisan

Nama
Komentar
Tebakan Kode
[Kode Huruf] Ndak bisa dibaca? klik di sini.
 
[TWTR] [FB] [GPLUS]
Seharusnya situs ini kelihatan bagus kalo anda lihat menggunakan layar monitor. Jangan pernah mencoba membaca isinya pakai kuku atau barang-barang klenik lainnya.
kamas@its.ac.id