Optimasi OPcache di Laravel: Panduan Lengkap untuk Performa Produksi

by | Aug 20, 2025

Optimasi OPcache di Laravel: Panduan Lengkap untuk Performa Produksi

Apa itu OPcache & Kenapa Penting untuk Laravel?

OPcache adalah bytecode cache bawaan PHP yang menyimpan hasil kompilasi file .php ke memori. Tanpa OPcache, setiap request harus membaca file dari disk dan mengkompilasinya lagi—lambat & boros CPU. Dengan OPcache, Laravel:

  • Lebih cepat merespons (latensi turun, TTFB lebih kecil).
  • Lebih hemat CPU (kompilasi berulang dihindari).
  • Lebih stabil pada traffic tinggi (lebih sedikit I/O disk).

Cara Kerja Singkat OPcache

  1. Pertama kali file .php diakses, PHP mengkompilasi → OPcache simpan bytecode ke memori.
  2. Request berikutnya pakai bytecode di memori (tidak baca/kompilasi ulang).
  3. Deteksi perubahan file diatur melalui validate_timestamps dan revalidate_freq, atau dimatikan untuk immutable deploy.

Korelasi dengan Laravel

  • Cache konfig & route (lihat bagian “Optimasi Laravel + OPcache”) mengurangi jumlah file yang perlu dimuat.
  • Autoload classmap yang dioptimasi menekan file stat dan include.
  • Laravel cenderung I/O bound; OPcache memberi keuntungan nyata terutama pada kompilasi, bukan logika bisnis.

Cek OPcache Aktif

Di shared hosting/cPanel:

  1. Buka cPanel → Select PHP Version (atau MultiPHP) → pastikan opcache aktif.
  2. Opsional: buat file phpinfo.php berisi <?php phpinfo(); lalu akses; cari bagian “Zend OPcache”. Hapus file setelah cek.

Setting OPcache di cPanel (aman)

Gunakan Editor INI (MultiPHP INI Editor) atau .user.ini di public_html. Contoh nilai produksi yang umum:

opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=192
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
opcache.fast_shutdown=1
opcache.save_comments=1
; JIT (opsional), pada aplikasi web umumnya tidak signifikan:
opcache.jit=0
opcache.jit_buffer_size=0

Catatan: Pada beberapa shared hosting, sebagian direktif dibatasi. Sesuaikan nilai dengan paket hosting Anda.

Setting OPcache via php.ini/CLI (VPS/Dedicated)

Jika mengelola server sendiri (PHP-FPM):

; php.ini / www.conf include path OPcache
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=40000
opcache.validate_timestamps=0   ; immutable deploy (lihat strategi deploy)
opcache.revalidate_freq=0
opcache.save_comments=1
opcache.fast_shutdown=1
opcache.jit=0
opcache.jit_buffer_size=0

Reload PHP-FPM setelah mengubah konfigurasi.

Tuning : Memori & File

  • opcache.memory_consumption: total memori untuk bytecode (MB). Aplikasi Laravel ukuran sedang nyaman di 128–256MB. Besar proyek/komposer → naikkan.
  • opcache.max_accelerated_files: jumlah maksimal file yang diindeks. Nilai terlalu kecil membuat cache sering miss. Untuk proyek menengah, 20–40 ribu aman.
  • opcache.interned_strings_buffer: cache string. 8–16MB cukup untuk banyak aplikasi.
  • opcache.save_comments: biarkan 1 untuk kompatibilitas (atribut/annotations pada beberapa library).

Strategi Deploy: Aman & Tanpa Downtime

Ada dua model umum:

  1. Hot reload (mudah, fleksibel)
    Biarkan validate_timestamps=1, revalidate_freq=2. Perubahan file akan terdeteksi otomatis dalam 2 detik. Cocok untuk shared hosting/cPanel.
  2. Immutable/Atomic deploy (paling kencang)
    Set validate_timestamps=0 di produksi. Deploy ke folder baru (mis. releases/2025xxxx) → symlink switch current → reload PHP-FPM. OPcache tidak cek timestamp (nol overhead), tetapi wajib reload FPM saat rilis.

Reset OPcache Saat Deploy

  • PHP-FPM reload: cara paling bersih agar worker baca path baru.
  • Endpoint admin (opsional, amankan!): buat route yang memanggil opcache_reset() (hanya jika diperlukan dan dibatasi aksesnya).
  • Catatan CLI: OPcache CLI terpisah dari FPM/Apache. opcache_reset() di CLI tidak menyentuh FPM cache.

Optimasi Laravel + OPcache

  1. Matikan debug: APP_ENV=production APP_DEBUG=false
  2. Cache konfigurasi & route: php artisan config:cache php artisan route:cache php artisan view:cache php artisan event:cache Mengurangi jumlah file yang harus dimuat dan menghemat slot OPcache.
  3. Optimalkan autoload Composer: composer install --no-dev --optimize-autoloader composer dump-autoload -o Mengurangi classmap lookup dan sistem file stat.
  4. Kurangi file dinamis: simpan konfigurasi environment yang jarang berubah (cache/konstanta) dan gunakan cache aplikasi (Redis/file) untuk data yang sering diakses.
  5. Gunakan OPcache + View cache: Blade sudah dikompilasi → cache view mempercepat rendering awal.
Baca Juga:  Warning tech_domain in EA4-metainfo.json

Observabilitas & Monitoring

Untuk memantau OPcache (hanya di lingkungan aman/IP terbatas):


// /storage/tools/opcache-status.php (JANGAN publik)
header('Content-Type: application/json');
echo json_encode(opcache_get_status(true));

Amankan akses (IP allowlist / basic auth). Lihat memory_usage, opcache_statistics, num_cached_scripts, dan tingkat hit rate.

Tentang JIT: Perlu di Laravel?

Untuk aplikasi web Laravel tipikal (I/O bound), JIT umumnya tidak memberi peningkatan signifikan. Ia menambah konsumsi memori; nonaktifkan kecuali Anda punya workload komputasi intensif tertentu.

Masalah Umum & Solusinya

  • Perubahan kode tidak terlihat: jika validate_timestamps=0, Anda wajib reload FPM saat deploy. Jika pakai timestamp, naikkan revalidate_freq sementara.
  • “Cache full” / banyak miss: tingkatkan memory_consumption dan/atau max_accelerated_files.
  • Fatal error akibat anotasi/atribut: pastikan opcache.save_comments=1.
  • Di cPanel nilai tak berubah: beberapa host menimpa nilai global; hubungi support atau gunakan MultiPHP INI Editor per domain.

Checklist Cepat (Produksi)

  • OPcache aktif, memori & file limit cukup (128–256MB; 20–40k files).
  • APP_DEBUG=false, jalankan config:cache, route:cache, view:cache, event:cache.
  • Composer --no-dev + dump-autoload -o.
  • Strategi deploy jelas: hot reload (timestamp) atau immutable (timestamp off + reload FPM).
  • Monitoring dasar: opcache_get_status() diakses aman.

FAQ


Apa manfaat OPcache untuk Laravel?

OPcache menyimpan bytecode PHP di memori sehingga request berikutnya tidak perlu kompilasi ulang. Hasilnya aplikasi Laravel lebih cepat, hemat CPU, dan stabil pada traffic tinggi.


Berapa setting memori OPcache yang ideal?

Untuk aplikasi Laravel menengah, mulai dari 128–256MB. Pantau opcache_get_status(); jika sering penuh, naikkan memori atau max_accelerated_files.


Kapan sebaiknya matikan validate_timestamps?

Matikan (0) hanya jika kamu menerapkan immutable/atomic deploy dan bisa reload PHP-FPM setiap rilis. Jika tidak, biarkan 1 dengan revalidate_freq kecil (1–2).


Bagaimana cara reset OPcache di shared hosting?

Ubah sementara versi PHP di MultiPHP (trigger reload) atau minta support reload FPM. Ingat, opcache_reset() di CLI tidak memengaruhi cache FPM.


Bisakah OPcache digunakan di shared hosting?

Ya, biasanya OPcache sudah otomatis aktif di shared hosting modern terutama di antmediahost. Kamu bisa mengeceknya di cPanel → Select PHP Version / MultiPHP INI Editor dan pastikan ekstensi opcache tercentang. Namun, tidak semua parameter bisa diubah (misalnya memory_consumption atau max_accelerated_files), karena dibatasi oleh system server kami. Walau begitu, Laravel tetap mendapat keuntungan besar dari OPcache walaupun di shared hosting.

0 Comments

Submit a Comment

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