AntMediaHost

Optimasi OPcache di Laravel: Panduan Lengkap untuk Performa Produksi

Rakeen Ferdiansyah
Rakeen Ferdiansyah
Tutorial 55
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 

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.

Observabilitas & Monitoring

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

// /storage/tools/opcache-status.php (JANGAN publik)

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.

Bagikan Artikel

Tinggalkan Komentar

Tinggalkan Komentar

Selesaikan verifikasi keamanan terlebih dahulu.
Komentar dari Pembaca

Komentar

0 komentar

Belum Ada Komentar

Jadilah yang pertama memberikan komentar!

Akreditasi & Partner

Microsoft PartnerGoogle WorkspaceZoom PartnerCloudLinux PartnerWHMCS PartnerPSE KominfocPanel Partner