Categories
Tutorial, Manual, Tips dan Trik

Move On MPM Prefork ke MPM Event, Sebuah Catatan

Apache memiliki teknologi Multi-Processing Modules (MPM) yang bertugas untuk mengikat port jaringan pada mesin, menerima permintaan dan mengirimkan permintaan ke anak-anak (children) untuk diproses. MPM yang tersedia sampai tulisan ini dibuat adalah mpm_netware (Netware), mpmt_os2 (OS/2), mpm_winnt (Windows), mpm_prefork(Unix), mpm_worker(Unix), dan mpm_event (Unix).

Daftar Isi

Migrasi MPM Prefork ke MPM Event

Untuk sebagian besar kasus, MPM Event memberikan waktu proses yang lebih cepat dibandingkan MPM Prefork. Pada MPM Event, Apache menggunakan PHP-FPM untuk memproses PHP yang terpisah dari Apache, sebagaimana yang dilakukan oleh Nginx.

— Move On MPM Prefork ke MPM Event, Sebuah Catatan
https://pdsi.unisayogya.ac.id/move-on-mpm-prefork-ke-mpm-event-sebuah-catatan/ 2021-07-06 12:36:56

Petunjuk berikut adalah petunjuk yang dilakukan di Ubuntu versi 18.04 yang menggunakan PHP versi 7.0

  1. apt-get install htop
  2. apt install php7.0-fpm
  3. a2enmod proxy_fcgi setenvif
  4. a2enconf php7.0-fpm
  5. a2dismod php7.0
  6. a2dismod mpm_prefork
  7. a2enmod mpm_event
  8. apt-get remove libapache2-mod-php7.0
  9. service apache2 restart
  10. service php7.0-fpm restart

Pengaturan MPM Event

Hitung NilaiMaksWorker dengan rumus:

  1. Hosting
    NilaiMaksWorker = UkuranRAMdalamMb/5.12 * 0.8 = UkuranRAMdalamMb/512 * 80
  2. Host sendiri
    1. Server hanya menjalankan Web
      NilaiMaksWorker = (UkuranRAMdalamGb – 2) * 200
    2. Server menjalankan Web dan servis lain, misalnya database
      NilaiMaksWorker = (UkuranRAMdalamGb – 2) * 150

|-Apache

  1. Jalankan perintah berikut dan catat jumlah cpu dan ukuran RAM
    htop
  2. Jalankan perintah berikut
    nano /etc/apache2/mods-enabled/mpm_event.conf
  3. Kemudian atur variabel sesuai dengan rumus di bawah ini
    ServerLimit NilaiMaksWorker / ThreadsPerChild
    StartServers JumlahCPU
    MinSpareThreads 25
    MaxSpareThreads 75
    ThreadLimit 64
    ThreadsPerChild 25
    MaxRequestWorkers NilaiMaksWorker
    MaxConnectionsPerChild 10000

|-PHP

  1. Jalankan perintah berikut dan catat jumlah cpu dan ukuran RAM
    htop
  2. Jalankan perintah berikut
    nano /etc/php/7.0/fpm/pool.d/www.conf
  3. Kemudian atur variabel sesuai dengan rumus di bawah ini
    1. Host sendiri dengan server hanya menjalankan Web
      pm = dynamic
      pm.max_children = 7% NilaiMaksWorker
      pm.start_servers = JumlahCPU * 2
      pm.min_spare_servers = JumlahCPU * 2
      pm.max_spare_servers = JumlahCPU * 4
      ;pm.max_requests = 0
    2. Hosting atau Host sendiri dengan server menjalankan Web dan servis lain, misalnya database
      pm = dynamic
      pm.max_children = 7% NilaiMaksWorker
      pm.start_servers = JumlahCPU * 2
      pm.min_spare_servers = JumlahCPU * 2
      pm.max_spare_servers = JumlahCPU * 3
      ;pm.max_requests = 0

Di bawah ini adalah contoh pengaturan PHP-FPM menggunakan Plesk pada website yang di-hosting dengan 1 CPU dan RAM 512 Mb

Pengaturan PHP-FPM pada server yang di-hosting
Pengaturan PHP-FPM pada server yang di-hosting

Mengaktifkan HTTP2

Jalankan perintah di bawah ini:

sudo a2enmod http2
sudo service apache2 restart
sudo echo "<IfModule http2_module>" > /etc/apache2/conf-available/http2.conf
sudo echo "Protocols h2 h2c http/1.1" >> /etc/apache2/conf-available/http2.conf
sudo echo "H2Direct on" >> /etc/apache2/conf-available/http2.conf
sudo echo "</IfModule>" >> /etc/apache2/conf-available/http2.conf
sudo a2enconf http2
sudo apachectl configtest && sudo service apache2 restart

Kemudian tambahkan/sesuaikan pengaturan di bawah ini

  1. ssl-vhost file (/etc/apache2/sites-available/default-ssl.conf)

    Protocols h2 h2c http/1.1
    H2Push on
    H2PushPriority * after
    H2PushPriority text/css before
    H2PushPriority image/jpg after 32
    H2PushPriority image/jpeg after 32
    H2PushPriority image/png after 32
    H2PushPriority application/javascript interleaved
  2. Tambahkan pada Virtual Host
    Protocols h2 h2c http/1.1

Demikian, semoga bermanfaat. [bst]

Pengujian

|-Tahapan Pengujian

Apache memiliki fitur untuk melakukan pengujian dengan alat bernama Apache Benchmark (ab).

  1. Buka dua buah terminal (command prompt) melalui ssh
  2. Jalankan monitoring penggunaan sumber daya di terminal pertama dengan perintah
    htop
  3. Jalankan pengujian di terminal kedua dengan perintah
    service php7.0-fpm restart && ab -n <pm.max_children> -c <pm.max_children> https://<alamat web anda>/
    dimana:
    • <pm.max_children> adalah nilai yang ada di pengaturan php-fpm (pada pertama kali bernilai 7% NilaiMaksWorker)
    • Jika pada server terdapat beberapa alamat web, maka <alamat web anda> adalah alamat dari web yang tidak menggunakan cache.

|-Parameter Keberhasilan

Amati tampilan pada monitoring penggunaan sumber daya. Hentikan pengujian langsung apabila swap mulai digunakan (ctrl + c). Kemudian jalankan perintah swapoff -a && swapon -a

benchmark setting website
benchmark setting website

Parameter keberhasilan

  1. Swap tidak digunakan. Sisa RAM tinggal sedikit.
  2. Koneksi ssh tidak terputus

Catatan Penting: Apabila semua web yang ada di server menggunakan cache, maka disarankan sudah cukup menggunakan pm.max_children bernilai 7% NilaiMaksWorker karena sulit untuk menentukan apakah semua laman yang dibuka 100% menggunakan cache. Idealnya pengujian dilakukan pada web yang tidak menggunakan cache, sedangkan cache dapat diaktifkan setelah pengujian selesai.

Apabila tidak berhasil, maka turunkan <pm.max_children> di pengaturan pengaturan php-fpm, kemudian jalankan kembali pengujian.

Apabila RAM yang digunakan masih ada banyak sisa, maka naikkan <pm.max_children> di pengaturan pengaturan php-fpm, kemudian jalankan kembali pengujian.

Sumber:

By basit

Biro Pengembangan Teknologi Dan Sistem Informasi

Leave a Reply

Your email address will not be published. Required fields are marked *

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