5 Tips untuk Meningkatkan Kinerja Server Web Apache Anda


Menurut laporan terbaru dari Netcraft (perusahaan Internet terkenal yang menyediakan antara lain layanan statistik penggunaan browser web), Apache terus menjadi server web yang paling banyak digunakan di antara situs dan komputer yang terhubung ke Internet.

Selain itu, Apache terus mengalami pertumbuhan terbesar di antara server web teratas, diikuti oleh Nginx dan IIS. Jadi, jika Anda adalah administrator sistem yang bertugas mengelola instalasi Apache, Anda perlu mengetahui cara memastikan server web Anda bekerja pada kapasitas terbaiknya sesuai dengan kebutuhan Anda (atau klien Anda).

Pada artikel ini kita akan membahas beberapa tips yang akan membantu Anda memastikan bahwa Apache akan berjalan dengan lancar dan mampu menangani jumlah permintaan yang Anda harapkan dari klien jarak jauh.

Namun, harap diingat bahwa Apache tidak dirancang dengan tujuan untuk membuat rekor benchmark – namun, meskipun demikian, Apache masih mampu memberikan kinerja tinggi di hampir semua kasus penggunaan yang mungkin Anda pikirkan.

TIPS #1: Selalu perbarui Apache ke versi terbarunya

Tentu saja menginstal versi terbaru Apache mungkin merupakan salah satu hal pertama yang perlu Anda pertimbangkan. Mulai 19 November 2015, versi terbaru Apache yang tersedia di repositori CentOS 7 adalah 2.4.6, sedangkan di Debian adalah >2.4.10.

Namun, mungkin ada perbaikan terkini atau perbaikan bug yang telah ditambahkan ke versi stabil yang baru dirilis, yang kemudian tersedia untuk diunduh dan dipasang dari sumber. Petunjuk kompilasi dan instalasi juga disediakan di sini – ingatlah bahwa jika Anda memilih metode pembaruan ini, Anda mungkin ingin mencadangkan file konfigurasi/situs/host virtual Anda saat ini sebagai tindakan pencegahan.

Bagaimanapun, Anda dapat memeriksa versi yang terinstal saat ini sebagai berikut:

httpd -v               [On RedHat/CentOS based systems]
apache2 –v             [On Debian/Ubuntu based systems] 

Sebagai aturan praktis, tetap gunakan metode pembaruan yang disediakan oleh manajer paket distribusi pilihan Anda (yum update httpd atau aptitude safe-upgrade apache2, untuk CentOS atau Debian, masing-masing) kecuali tidak ada cara lain. Anda dapat membaca catatan rilis terbaru di bagian Dokumentasi Apache di situs web Proyek server HTTP Apache.

TIPS #2: Jika Anda menggunakan Kernel yang lebih lama dari 2.4, pertimbangkan untuk melakukan upgrade sekarang

Mengapa? Kernel versi 2.4 dan yang lebih baru memiliki panggilan sistem kernel sendfile yang diaktifkan secara default. Hal ini, pada gilirannya, memfasilitasi transfer file jaringan berkinerja tinggi (yang diinginkan dalam konteks komunikasi server-klien web) dan memungkinkan Apache untuk mengirimkan konten statis lebih cepat dan dengan penggunaan CPU yang lebih rendah dengan melakukan operasi baca dan kirim secara bersamaan.

Anda dapat melihat kernel yang terinstal saat ini dengan:

uname -r

dan bandingkan dengan kernel stabil terbaru di www.kernel.org (4.3 pada saat penulisan ini).

Meskipun ini adalah proses yang tidak ditujukan untuk pemula, mengupgrade kernel Anda adalah latihan yang menarik untuk mempelajari lebih lanjut tentang internal Linux.

TIPS #3: Pilih Modul Multi-Pemrosesan (MPM) yang paling sesuai untuk kasus Anda

Dalam praktiknya, MPM memperluas fungsionalitas modular Apache dengan memungkinkan Anda memutuskan cara mengonfigurasi server web untuk mengikat ke port jaringan pada mesin, menerima permintaan dari klien, dan menggunakan proses turunan (dan thread, alternatifnya) untuk menangani permintaan tersebut.

Mulai versi 2.4, Apache menawarkan tiga MPM berbeda untuk dipilih, bergantung pada kebutuhan Anda:

  1. MPM prefork menggunakan beberapa proses anak tanpa threading. Setiap proses menangani satu koneksi pada satu waktu tanpa membuat thread terpisah untuk setiap koneksi. Tanpa menjelaskan terlalu banyak detail, kami dapat mengatakan bahwa Anda hanya ingin menggunakan MPM ini saat men-debug aplikasi yang menggunakan, atau jika aplikasi Anda perlu menangani, modul yang tidak aman untuk thread seperti mod_php.
  2. MPM pekerja menggunakan beberapa thread per proses anak, di mana setiap thread menangani satu koneksi pada satu waktu. Ini adalah pilihan yang baik untuk server dengan lalu lintas tinggi karena memungkinkan lebih banyak koneksi bersamaan ditangani dengan RAM lebih sedikit dibandingkan kasus sebelumnya.
  3. Terakhir, MPM event adalah MPM default di sebagian besar instalasi Apache untuk versi 2.4 dan yang lebih baru. Hal ini mirip dengan MPM pekerja karena ia juga membuat beberapa thread per proses anak tetapi dengan keuntungan: ia menyebabkan koneksi KeepAlive atau idle (saat mereka tetap dalam keadaan tersebut) untuk ditangani oleh satu thread, sehingga membebaskan memori yang dapat dialokasikan ke thread lain. MPM ini tidak cocok untuk digunakan dengan modul non-thread-safe seperti mod_php, sehingga penggantinya harus digunakan PHP-FPM.

Untuk memeriksa MPM yang digunakan oleh instalasi Apache Anda, Anda dapat melakukan:

httpd -V

Gambar di bawah menunjukkan bahwa server web tertentu menggunakan MPM prefork.

Untuk mengubahnya, Anda perlu mengedit:

/etc/httpd/conf.modules.d/00-mpm.conf          [On RedHat/CentOS based systems]
/etc/apache2/mods-available/<mpm>.load   [On Debian/Ubuntu based systems]

Dimana dapat berupa mpm_event, mpm_worker, atau mpm_prefork.

dan batalkan komentar pada baris yang memuat modul yang diinginkan seperti:

LoadModule mpm_event_module modules/mod_mpm_event.so

Catatan: Agar acara MPM berfungsi di Debian, Anda mungkin harus menginstal paket libapache2-mod-fastcgi dari paket non-free repositori.

Selain itu, untuk CentOS Anda memerlukan php-fpm (bersama dengan fcgi dan mod_fcgid) sedangkan di Debian disebut php5-fpm< (bersama dengan apache2-mpm-event).

Terakhir, restart server web dan layanan php-fpm (atau php5-fpm) yang baru diinstal:

Di RedHat/CentOS

systemctl restart httpd php-fpm && systemctl enable httpd php-fpm

Di Debian/Ubuntu

systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm

Meskipun Anda dapat mengatur Apache untuk menggunakan MPM tertentu, konfigurasi tersebut dapat diganti pada basis per-virtual dengan cara yang sama seperti yang ditunjukkan sebelumnya.

Cukup masukkan tag yang sesuai ke dalam file konfigurasi untuk setiap host virtual dan Anda siap melakukannya – tetapi pastikan Anda menggunakan satu dan hanya satu MPM per vhost.

Terakhir, perlu diketahui bahwa apa pun distribusi yang Anda pilih, php-fpm bergantung pada implementasi FastCGI, itulah alasan mengapa saya merekomendasikan instalasi paket tambahan sebelumnya.

Untuk detail dan contoh lebih lanjut tentang php-fpm dan bagaimana hal tersebut dapat meningkatkan kinerja Apache bersama dengan acara MPM, Anda harus merujuk pada dokumentasi resmi.

Inilah yang saya lihat setelah mengubah MPM default dari prefork menjadi event di kotak yang sama seperti yang ditunjukkan pada gambar sebelumnya:

Di CentOS 7, Anda perlu memastikan bahwa layanan http dan https diaktifkan melalui firewall, dan antarmuka jaringan ) ditambahkan dengan benar ke zona default.

Misalnya:

firewall-cmd --zone=internal --add-interface=tun6to4 
firewall-cmd --zone=internal --add-interface=tun6to4 --permanent 
firewall-cmd --set-default-zone=internal 
firewall-cmd --add-service=http 
firewall-cmd --add-service=https 
firewall-cmd --add-service=http --permanent 
firewall-cmd --add-service=https --permanent 
firewall-cmd --reload

Alasan mengapa saya mengemukakan hal ini adalah karena baru-baru ini saya mengalami masalah ketika pengaturan konfigurasi firewalld default di VPS cloud mencegah php-fpm dan Apache memproses file php.

Sebagai tes dasar (saya yakin Anda bisa memikirkan tes yang lebih rumit atau menegangkan), saya akan membuat file php yang memeriksa keberadaan file lain bernama test.php di direktori yang sama dari dua CentOS 7 server dengan karakteristik dan beban perangkat keras yang sama tetapi dengan MPM berbeda. Salah satunya akan menggunakan event dan yang lainnya akan menggunakan prefork:

Ini adalah kode php yang saya simpan ke dalam file bernama checkiffileexists.php:

<?php
$filename = 'test.php';

if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
    echo "The file $filename does not exist";
}
?>

Kemudian kita akan menjalankan alat benchmark Apache (ab) dengan 200 permintaan simultan hingga 2000 permintaan selesai:

ab -k -c 100 -n 2000 localhost/checkiffileexists.php

Mari kita jalankan tes dan bandingkan hasilnya. Perhatikan statistik kinerja:

Seperti yang Anda lihat, performa server dengan event jauh lebih unggul dibandingkan prefork dalam setiap aspek pengujian ini.

TIPS #4: Alokasikan RAM dengan bijak untuk Apache

Mungkin item perangkat keras yang paling penting untuk dipertimbangkan adalah jumlah RAM yang dialokasikan untuk setiap proses Apache. Meskipun Anda tidak dapat mengontrol hal ini secara langsung, Anda dapat membatasi jumlah proses anak melalui direktif MaxRequestWorkers (sebelumnya dikenal sebagai MaxClients di Apache 2.2), yang akan membatasi penggunaan RAM oleh Apache. Sekali lagi, Anda dapat menetapkan nilai ini berdasarkan per host atau per virtual host.

Untuk melakukannya, Anda harus mencatat jumlah rata-rata RAM yang digunakan oleh Apache, lalu mengalikannya dengan jumlah MaxRequestWorkers, dan itulah jumlah memori yang akan dialokasikan untuk proses Apache. Satu hal yang Anda tidak ingin server web Anda lakukan adalah mulai menggunakan swap, karena hal itu akan menurunkan kinerjanya secara signifikan. Oleh karena itu, Anda harus selalu menjaga penggunaan RAM oleh Apache dalam batas yang Anda mampu dan jangan pernah mengandalkan swap untuk itu.

Misalnya, blok berikut akan membatasi jumlah klien simultan menjadi 30. Jika lebih banyak klien yang masuk ke host, mereka mungkin mengalami penundaan atau kegagalan sesaat yang dapat diselesaikan dengan mudah dengan menyegarkan browser. Meskipun hal ini mungkin dianggap tidak diinginkan, hal ini lebih sehat untuk server dan dalam jangka panjang, juga terbaik untuk situs Anda.

Anda dapat menempatkan blok ini di dalam /etc/httpd/conf/httpd.conf atau /etc/apache2/apache2.conf, tergantung apakah Anda menggunakan CentOS atau Debian.

Harap dicatat bahwa prinsip yang sama berlaku untuk semua MPM – Saya menggunakan event di sini untuk melanjutkan konsep yang diuraikan dalam tip sebelumnya:

<IfModule mpm_event_module>
    StartServers 3
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadLimit                      64
    ThreadsPerChild          25
    MaxRequestWorkers    30
    MaxConnectionsPerChild    1000
</IfModule>

Bagaimanapun, sangat disarankan agar Anda merujuk ke dokumen Apache 2.4 untuk melihat arahan mana yang diperbolehkan untuk MPM pilihan Anda.

TIPS #5: Ketahui aplikasi Anda

Sebagai aturan praktis, Anda tidak boleh memuat modul Apache apa pun yang tidak benar-benar diperlukan agar aplikasi Anda dapat berfungsi. Hal ini memerlukan setidaknya pengetahuan menyeluruh tentang aplikasi yang berjalan di server Anda, khususnya jika Anda adalah administrator sistem dan ada tim lain yang bertanggung jawab atas pengembangan.

Anda dapat membuat daftar modul yang sedang dimuat dengan:

httpd -M          [On RedHat/CentOS based systems]
apache2ctl -M     [On Debian/Ubuntu based systems]

Untuk membongkar/menonaktifkan modul di CentOS, Anda perlu memberi komentar pada baris yang dimulai dengan LoadModule (baik di file konfigurasi utama atau di file tambahan di dalam /etc/httpd/conf.modules.d.

Di sisi lain, Debian menyediakan alat yang disebut a2dismod untuk menonaktifkan modul dan digunakan sebagai berikut:

a2dismod module_name

Untuk mengaktifkannya kembali:

a2enmod module_name

Apa pun kasusnya, ingatlah untuk me-restart Apache agar perubahan diterapkan.

Ringkasan

Dalam artikel ini kami telah meninjau 5 tips yang akan membantu Anda menyempurnakan server web Apache dan meningkatkan kinerjanya. Selain itu, Anda harus ingat bahwa optimasi dan kinerja tanpa keamanan tidak ada gunanya, jadi Anda mungkin ingin merujuk pada instalasi mod_pagespeed untuk meningkatkan kinerja server web dan artikel tips pengerasan Apache di linux-console.net juga.

Karena kami tidak dapat membahas secara memadai semua aspek topik ini dalam artikel ini, mungkin Anda akan memikirkan ide lain yang ingin Anda bagikan kepada komunitas lainnya. Jika demikian, silakan beri tahu kami menggunakan formulir komentar di bawah.