Cara Menentukan Max Clients Yang Ideal

Pada web server Apache besarnya RAM sangatlah menentukan perfoma website kita, jadi semakin besar RAM maka website kita jadi bisa semakin banyak menerima pengunjung yang datang secara bersamaan.

Permasalahan yang sering muncul adalah server kekurangan memory yang mengakibatkan Apache harus menggunakan swap memory (disk) yang berakibat loading website kita menjadi sangat lambat.

Maka yang perlu kita lakukan adalah mencari batas max clients yang ideal, agar server tidak overload.

Misal ada 200 orang yang masuk secara bersamaan padahal daya tampungnya hanya 100 tapi karena kita salah dalam menentukan server limit dan max clients pada httpd.conf maka ke 200 orang tersebut tetap masuk secara bersamaan dan bukannya mengantri per 100 orang.

Secara default Apache mempunyai konfigurasi sbb:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers    20
ServerLimit        256
MaxClients         256
MaxRequestsPerChild  4000
</IfModule>

Yang berarti mendeklarasikan kalau daya tampungnya adalah 256.

Pengumpulan data Resource Server

  1. Berapa RAM Anda?
    Jumlah RAM yang kita miliki saat membeli server
  2. Berapa RAM yang Dialokasikan Untuk OS?
    Jumlah Rata-rata RAM yang httpd gunakan, bisa mengeksekusi perintah berikut:
    ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
  3. Berapa RAM yang Dialokasikan Untuk MySQL?
    Untuk mengetahui RAM yang dialokasikan untuk MySQL, cara terbaik dengan menggunakan script mysqltunner.pl.

    Download & Install mysqltuner.pl
    Login ke server via SSH.
    Download mysqltuner.pl 
    cd /usr/local/bin
    wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    chmod +x mysqltuner.pl
    Lalu jalankan mysqltuner.pl /usr/local/bin/mysqltuner.pl
  4. Berapa Rata-Rata Proses Apache?
    ps -ylC httpd | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Proccess Size (MB): "x/((y-1)*1024)}'

Hasil yang kita dapatkan:
Jumlah RAM = 125,7G (125700 MB).
Alokasi RAM untuk MySQL = 40,9G (40900 MB).
Alokasi RAM untuk OS = 59,5921 MB.
Rata-rata proses Apache = 69,2

Rumus untuk menghitung Max clients adalah:
Max Clients = Jumlah RAM server – (Alokasi RAM ke MySQL + Alokasi RAM ke OS) / Rata-rata proses Apache

Max clients = 125700 – (40900+ 59,5921)/69,2
Max clients = (125700 – 40959,5921)/69,2
Max clients = 84740,4079/69,2
Max clients = 1224,572368 Dibulatkan menjadi 1225.
Nah kemampuan server kita adalah 1225 orang saja, jadi misal ada 1300 orang yang masuk secara bersamaan yang 75 orang antri terlebih dahulu.

Server Optimization: MySQL Tuning

  1. Edit file my.cnf: nano /etc/my.cnf
  2. Tambahkan code berikut sebagai langkah awal tuning: 
    query_cache_size = 16M
    query_cache_limit = 8M
    tmp_table_size = 16M
    max_heap_table_size = 16M
    thread_cache_size = 4
  3. Restart MySQL: service mysql restart
  1. Jika saran mengatakan Run OPTIMIZE TABLE to defragment tables for better performance. Maka jalankan command berikut ini untuk mengoptimalkannya. mysqlcheck -u root --auto-repair --optimize --all-databases
  2. Lalu restart MySQL: service mysql restart
  1. Buka pico /etc/my.cnf dan tambahkan code berikut ini: log-slow-queries=/var/lib/mysql/slow.log
  2. Ctrl+o (Write Out), lalu save dengan ENTER.