Di Dunia web server kita pasti pernah mendengar istilah ” KeepAliveTimeout “, Lalu pertanyaannya “Apa itu KeepAlive TimeOut” ??
Oke, kita ilustrasikan server web seperti Depot atau Restoran. Katakanlah User pengunjung situs web kita adalah pelanggan, dan software server adalah staf-nya. Perangkat lunak server memiliki “slot server”, yang dapat kita bayangkan sebagai anggota staf, yang akan menangani permintaan. Layaknya sebuah bisnis yang tidak dapat memiliki staf tanpa batas, server web kita juga memiliki “slot” yang terbatas, karena setiap slot membutuhkan RAM dan waktu prosesor.
Namun, Kita dapat memiliki lebih banyak pelanggan daripada jumlah staf, karena setiap pelanggan hanya membutuhkan bantuan dan pelayanan selama kunjungan mereka — misalnya saat pesan makanan, bayar tagihan, dan sebagainya. Selain itu, kita bisa memiliki lebih banyak pengunjung situs web daripada “slot server” yang kita miliki, karena, sebagian besar waktu, pengunjung kita membaca situs web Anda, melihat gambar, dan sebagainya. Jauh lebih jarang, mereka mengklik sesuatu untuk meminta halaman baru.
Jadi, disinilah Keepalive ? Bayangkan proses pemesanan di restoran. Pelayan akan menanyakan apa yang diinginkan pengunjung, pelayanan akan mencatat setiap menu, lalu pergi setelah selesai memesan. Pelayan tidak akan langsung kembali ke dapur untuk memesan setiap menu yang diminta pengunjung, hal itu akan sangat tidak efisien! Di saat yang sama, jika pengunjung merasa kesulitan memutuskan apa yang di-inginkan, maka pelayan akan menawarkan untuk kembali lagi nanti setelah pengunjung memutuskan pesanannya. Pelayan tidak akan menunggu selamanya sampai pengunjung memutuskan semua yang ingin Anda pesan.
Keepalive dan batas waktu keepalive sangat mirip dengan ini. Sebuah halaman web terdiri dari banyak hal berbeda yang harus diminta oleh peramban web. Ada banyak berkas yang terdiri dari teks, informasi pemformatan, iklan, gambar, dan video. Tanpa keepalive, peramban web perlu “menandai” server untuk setiap permintaan ini. Hal ini dapat sangat memperlambat segalanya. Jika tidak ada slot kosong, waktu tunggunya bisa lebih lama lagi. Sebaliknya, keepalive memungkinkan peramban web Anda untuk “menandai” server hanya sekali, lalu meminta banyak berkas dan gambar yang berbeda satu demi satu. Ketika peramban berhenti meminta hal baru, server web akan mengosongkan “slot” tersebut untuk digunakan pengunjung lain. Batas waktu keepalive menentukan berapa lama slot akan tetap terisi, setelah peramban web berhenti meminta hal baru.
Semoga ini memberi Anda gambaran tentang apa itu Keepalive, dan apa yang diwakili oleh batas waktu Keepalive: yaitu jumlah waktu di mana peramban web pengguna tunggal mendapat perhatian penuh dari salah satu dari sejumlah kecil “slot” server yang tersedia untuk memproses permintaan.
Bagaimana cara mengatur ukuran yang optimal bagi server kita ??
Jawaban singkatnya adalah:
- Keepalive harus diaktifkan
- Batas waktu Keepalive, nilai ditetapkan ke 1 detik (menunggu permintaan berikutnya selama 1 detik)
- Permintaan Keepalive harus 100 atau lebih. Batasan unlimited biasanya tidak masalah.
Layaknya server yang tidak akan menunggu satu jam pun hingga Anda memilih hidangan penutup, server web seperti Apache tidak akan menunggu tanpa batas waktu hingga peramban web Anda meminta berkas atau gambar baru. Sayangnya, waktu tunggu standar/default-nya terlalu lama.
Satu halaman web biasanya terdiri dari beberapa lusin berkas atau gambar, dan membutuhkan waktu beberapa detik untuk dimuat. Waktu yang dibutuhkan server web untuk menerima dan memproses satu permintaan, misalnya, memuat satu gambar, biasanya kurang dari 1/10 detik. Batas waktu keepalive adalah penghitung waktu mundur, dan diatur ulang setiap kali peramban web meminta item baru. Selama peramban terus meminta lebih banyak hal, batas waktu tersebut tidak akan kedaluwarsa, bahkan dengan pengaturan batas waktu keepalive 1 detik.
Namun, pengaturan default untuk Apache Keepalive Timeout adalah 15 detik. Dalam istilah komputer, ini seperti selamanya. Jika butuh 2 detik untuk memuat halaman web, maka slot tersebut aktif selama 2 detik untuk melayani permintaan, lalu menunggu 15 detik lebih lama, menunggu untuk melihat apakah pengunjung membutuhkan permintaan lain. Jika pengunjung tidak mengklik apa pun atau mencoba memuat sesuatu yang baru dalam 15 detik tersebut, slot tersebut tidak dapat melakukan pekerjaan yang bermanfaat bagi pengunjung mana pun. Jika kita cukup beruntung untuk mendapatkan salah satu slot berharga ini dan mempertahankannya, Kita mungkin memuat halaman kedua kita 1/10 detik lebih cepat dengan cara ini. Ini karena Anda tidak perlu membuka koneksi baru ke server, yang membutuhkan sedikit waktu. Tetapi ini dengan mengorbankan harus menunggu waktu yang sangat lama untuk mendapatkan akses ke slot sejak awal kemungkinan besar, semua slot sedang “digunakan” untuk keepalive dari pengunjung lain yang tidak aktif.
Ini seperti jika seorang pelayan, setelah mengantarkan makanan Anda, menunggu 15 menit untuk melihat apakah Anda membutuhkan sesuatu lagi, sebelum membantu orang lain. Bahkan 1 menit (untuk pelayan) atau 1 detik (untuk server web) lebih lama dari yang dibutuhkan, tetapi setidaknya itu tidak akan menjadi bencana total. Bahkan dengan batas waktu keepalive 1 detik (batas minimum yang dapat Anda atur), hampir dapat dipastikan bahwa peramban web akan dapat mempertahankan slot koneksi yang sama selama halaman dimuat. Tidak ada alasan untuk mengatur batas waktu keepalive lebih dari 1 detik, hampir selamanya.
Apa yang terjadi bila keepalive tidak diatur dengan benar atau dibiarkan pada pengaturan default?
Singkatnya: bencana.
Bayangkan pelayan kita, mengantarkan makanan Anda, lalu menunggu 15 menit sebelum melanjutkan pekerjaan lainnya. Biasanya, ini akan membuat restoran (atau server web) macet total. Tidak ada yang bisa memanggil pelayan untuk mencatat pesanan mereka. Makanan yang sudah siap saji akan menjadi dingin menunggu untuk diambil.
Katakanlah manajer restoran memecahkan masalah ini dengan menjadwalkan lebih banyak pelayan untuk bekerja hari itu. Ini memiliki dua masalah. Pertama, ini sangat mahal. Kedua, tidak ada cukup ruang fisik di restoran, tempat parkir, ruang istirahat, dll., untuk menampung satu pelayan untuk setiap meja. Pelayan dan staf akan saling bertabrakan saat mencoba pergi ke mana pun, dan pelayan akan mendapatkan tip yang sangat sedikit jika mereka hanya melayani satu meja pada satu waktu.
Situasinya tidak jauh berbeda untuk server web. Jika Anda menambah jumlah slot koneksi untuk mengatasi masalah ini, Anda akan segera menghadapi masalah serius. Setiap slot koneksi menggunakan RAM. Karena membutuhkan lebih banyak slot untuk pengguna yang sama, server Anda dapat dengan mudah kehabisan RAM dan mengalami crash. Selain itu, ada masalah yang disebut “peralihan konteks” pada komputer. Sederhananya, setiap slot adalah sebuah program, dan beralih dari satu program ke program lain merupakan operasi yang mahal bagi komputer. Jika Anda membutuhkan 1.000 program yang berjalan, alih-alih 200, waktu yang dihabiskan untuk beralih di antara program-program tersebut mulai menggunakan lebih banyak waktu prosesor daripada waktu yang dihabiskan program-program tersebut untuk melakukan pekerjaan sebenarnya. Ini bisa menjadi masalah yang sangat serius, bahkan jika Anda memiliki RAM dan kinerja pemrosesan yang memadai.
Lihat contoh kita sebelumnya: Sebuah halaman web memerlukan waktu 2 detik untuk dimuat.
Dalam satu skenario, keepalive selama 1 detik, maka slot tertentu bekerja selama 2 detik, dan tidak aktif selama 1 detik. Total 3 detik digunakan untuk setiap halaman yang dilihat.
Dalam skenario kedua (konfigurasi default), keepalive selama 15 detik, slot tertentu bekerja selama 2 detik, dan tidak aktif selama 15 detik. Total 17 detik digunakan untuk setiap halaman yang dilihat.
Jumlah ini hampir 6 kali lipat jumlah slot koneksi yang dibutuhkan untuk sejumlah pengunjung situs web Anda! Artinya, RAM 6 kali lipat lebih besar, dan pengalihan konteks 6 kali lipat lebih banyak. Hal ini dapat dengan mudah membuat server web crash. Atau, jika Anda telah menetapkan batas yang cukup rendah untuk jumlah slot koneksi yang dapat dibuat Apache, Anda memiliki masalah yang berbeda: Pengunjung harus menunggu sangat lama untuk melihat situs web Anda, meskipun server memiliki kapasitas CPU cadangan yang cukup besar untuk menangani pengunjung tambahan.
Hasil akhirnya cukup sederhana — membiarkan Apache Keepalive Timeout pada pengaturan default 15 detik akan menggunakan RAM 6 kali lebih banyak daripada yang diatur ke 1 detik. Sementara itu, tidak ada manfaat bagi pengguna, meskipun RAM Anda cukup. Pada akhirnya, keandalan dan kinerja situs web untuk server web apa pun, bahkan dengan jumlah pengunjung yang moderat, akan sangat menurun.
Jika Anda melewatkannya, berikut adalah pengaturan optimal untuk Apache Keepalive dan Keepalive Timeout:
- Keepalive harus diaktifkan
- Batas waktu Keepalive harus ditetapkan ke 1 detik
- Permintaan Keepalive harus 100 atau lebih. Batasan tak terbatas biasanya tidak masalah.
Edit: Batas Waktu Keepalive default untuk Apache tampaknya sekarang adalah 5 detik, dan tidak lagi 15 detik, setidaknya di cPanel. Jadi, skala masalah yang ditimbulkan oleh pengaturan ini secara default lebih kecil daripada sebelumnya. Meskipun demikian, pengaturan default 5 detik ini tidaklah optimal. 1 detik tetap merupakan pengaturan Batas Waktu Keepalive yang terbaik dan paling optimal.