---
title: "Cara Mengaktifkan OPcache PHP dan Mengukur Dampaknya"
description: "Cara mengecek dan menyalakan OPcache di PHP-FPM, memilih nilai memori dan jumlah file, lalu mengukur hasilnya dengan hit rate dan uji beban sederhana."
url: "https://nivelva.com/insight/cara-mengaktifkan-opcache-php-mengukur-dampaknya"
category: "Server \u0026 Infrastruktur"
tags: ["opcache","php","php-fpm","performa server","vps"]
author: "Lucas Tan"
published: "2026-11-11T12:55:00+07:00"
updated: "2026-11-11T12:55:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Mengaktifkan OPcache PHP dan Mengukur Dampaknya

> **Jawaban singkat:** OPcache menyimpan hasil kompilasi skrip PHP di memori sehingga PHP tidak membaca dan mengompilasi ulang file di setiap permintaan. Nyalakan di konfigurasi PHP-FPM, sesuaikan memori dan jumlah file maksimal, lalu ukur lewat opcache_get_status dan uji beban sebelum dan sesudah.

Sudahkah OPcache benar-benar menyala di server PHP kamu, dan ukurannya cukup? Banyak server sudah memasangnya, tapi dengan nilai bawaan yang terlalu kecil untuk aplikasi besar seperti WordPress dengan banyak plugin, Laravel, atau Magento. Hasilnya, sebagian file terus dikompilasi ulang dan manfaatnya tidak maksimal.

Cara kerjanya begini. Setiap kali PHP menjalankan skrip, file dibaca dari disk lalu diubah menjadi opcode yang bisa dieksekusi. OPcache menyimpan opcode itu di shared memory, sehingga permintaan berikutnya langsung memakai hasil yang sudah jadi. Panduan ini membahas cara mengecek, menyalakan, mengatur, lalu mengukur dampaknya dengan angka dari servermu sendiri.

## Langkah mengaktifkan dan mengukur OPcache

### 1. Cek apakah OPcache sudah ada

Jalankan di server:

```
php -v
php -m | grep -i opcache
```

Kalau `php -v` menampilkan baris "with Zend OPcache", ekstensinya termuat untuk PHP CLI. Ingat bahwa PHP CLI dan PHP-FPM punya file konfigurasi terpisah. Yang dipakai website adalah PHP-FPM, jadi cek juga lewat halaman `phpinfo()` sementara atau dengan skrip status di langkah 4.

Di Ubuntu dan Debian, bila belum ada, pasang paketnya, misalnya `sudo apt install php8.3-opcache`, sesuaikan dengan versi PHP-mu.

### 2. Atur nilai yang penting

Di Ubuntu dengan PHP 8.3, buat file khusus agar tidak tertimpa saat update paket, misalnya `/etc/php/8.3/fpm/conf.d/99-opcache.ini`:

```
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
```

Penjelasan singkat tiap baris ada di tabel berikut, berdasarkan dokumentasi konfigurasi OPcache di php.net:

| Pengaturan | Nilai bawaan | Fungsi |
|:--|:--|:--|
| `opcache.memory_consumption` | 128 (MB) | Ukuran shared memory untuk opcode |
| `opcache.interned_strings_buffer` | 8 (MB) | Memori untuk string yang dipakai bersama |
| `opcache.max_accelerated_files` | 10000 | Batas jumlah file yang bisa disimpan |
| `opcache.validate_timestamps` | 1 | Cek apakah file berubah |
| `opcache.revalidate_freq` | 2 (detik) | Seberapa sering perubahan file dicek |

Angka 256 MB dan 20000 file di contoh adalah titik awal, bukan angka ajaib. Langkah 4 menunjukkan cara memastikan nilai itu cukup atau berlebihan. Untuk `max_accelerated_files`, PHP memakai bilangan prima terdekat yang lebih besar dari nilai yang kamu tulis, jadi angka di status bisa sedikit berbeda.

Hitung kasar jumlah file PHP aplikasimu dengan:

```
find /var/www -type f -name "*.php" | wc -l
```

Pastikan `max_accelerated_files` di atas angka itu, dengan sisa ruang untuk update.

### 3. Muat ulang PHP-FPM

```
sudo php-fpm8.3 -t
sudo systemctl reload php8.3-fpm
```

Isi OPcache dibuang setiap PHP-FPM di-restart atau di-reload penuh, jadi beberapa permintaan pertama setelahnya akan sedikit lebih lambat sampai cache terisi kembali.

### 4. Lihat status OPcache dari dalam PHP-FPM

Buat file sementara, misalnya `/var/www/app/opc-status.php` dengan nama acak, isi:

```
<?php
$s = opcache_get_status(false);
header('Content-Type: text/plain');
printf("Memori terpakai: %.1f MB\n", $s['memory_usage']['used_memory'] / 1048576);
printf("Memori sisa: %.1f MB\n", $s['memory_usage']['free_memory'] / 1048576);
printf("Skrip tersimpan: %d\n", $s['opcache_statistics']['num_cached_scripts']);
printf("Hit rate: %.2f%%\n", $s['opcache_statistics']['opcache_hit_rate']);
printf("Restart karena memori penuh: %d\n", $s['opcache_statistics']['oom_restarts']);
```

Buka file itu di browser setelah situs dipakai beberapa saat. Yang dibaca:

- **Hit rate** idealnya sangat tinggi setelah cache terisi. Kalau rendah dan terus rendah, ada yang membuat cache sering dibuang.
- **Memori sisa** yang hampir nol atau **oom_restarts** di atas nol berarti `memory_consumption` terlalu kecil.
- **Skrip tersimpan** yang mendekati `max_accelerated_files` berarti batas file perlu dinaikkan.

Hapus file ini setelah selesai. Status OPcache membuka daftar path file di servermu, yang tidak perlu dilihat orang lain.

### 5. Ukur waktu respons sebelum dan sesudah

Angka yang paling jujur adalah angka dari aplikasimu sendiri. Lakukan di server staging atau di jam sepi. Pasang alat uji beban sederhana `ab` (paket `apache2-utils` di Ubuntu), lalu jalankan ke satu halaman yang dibuat oleh PHP:

```
ab -n 500 -c 10 https://staging.domainkamu.com/
```

Catat "Requests per second" dan "Time per request". Lalu matikan OPcache sementara (`opcache.enable=0`), reload PHP-FPM, dan ulangi perintah yang sama. Bandingkan kedua hasil, kemudian nyalakan lagi.

Pastikan halaman yang diuji tidak dilayani page cache (misalnya FastCGI cache atau plugin cache), karena di situ PHP tidak dipanggil dan OPcache tidak berperan. Untuk memisahkan efeknya, uji halaman dengan query string unik atau dalam kondisi login.

Besarnya perbedaan sangat tergantung aplikasinya. Aplikasi dengan banyak file dan framework besar biasanya merasakan dampak lebih jelas daripada skrip kecil.

### 6. Pertimbangkan validate_timestamps=0 untuk produksi

Dengan `opcache.validate_timestamps=0`, PHP tidak lagi mengecek apakah file berubah. Ini menghemat pemeriksaan file, tapi perubahan kode tidak akan terlihat sampai PHP-FPM di-reload. Cocok untuk server yang deploy-nya otomatis dan selalu diakhiri reload PHP-FPM, misalnya lewat [GitHub Actions](https://nivelva.com/insight/cara-deploy-otomatis-vps-github-actions). Kurang cocok untuk WordPress yang plugin dan temanya di-update dari dasbor, karena update itu tidak memicu reload.

## Bagaimana dengan JIT?

Sejak PHP 8.0, OPcache juga punya fitur JIT. JIT berguna untuk perhitungan berat, tapi aplikasi web biasa lebih banyak menunggu database dan jaringan. Nyalakan hanya bila hasil uji beban di aplikasimu sendiri memang menunjukkan perbaikan, dan matikan lagi bila tidak.

OPcache juga bukan pengganti cache lain. Ia mempercepat eksekusi PHP, bukan query database. Untuk itu kamu butuh object cache seperti [Redis untuk cache aplikasi](https://nivelva.com/insight/cara-pasang-redis-cache-aplikasi-vps) atau page cache.

## Pertanyaan yang sering diajukan

### Apakah OPcache aman dinyalakan di server dengan banyak website?

Aman, OPcache dipakai bersama oleh pool PHP-FPM yang berjalan di bawah proses master yang sama. Bila situs dimiliki pengguna berbeda, perhatikan pengaturan seperti opcache.validate_permission dan opcache.validate_root yang dijelaskan di dokumentasi PHP.

### Kenapa perubahan file PHP tidak langsung terlihat?

Karena OPcache baru mengecek perubahan sesuai revalidate_freq, atau tidak sama sekali bila validate_timestamps=0. Reload PHP-FPM untuk memaksa cache dibangun ulang.

### Apakah OPcache perlu untuk PHP CLI atau cron?

Bawaannya opcache.enable_cli bernilai 0. Untuk skrip CLI yang berjalan sebentar, manfaatnya kecil karena cache hilang setiap proses selesai.

### Berapa memori OPcache yang tepat?

Tidak ada angka tunggal. Mulai dari nilai yang longgar, biarkan situs berjalan normal, lalu lihat memori terpakai di status. Sisakan ruang untuk pertumbuhan dan pastikan oom_restarts tetap nol.

Checklist singkat:

- OPcache termuat di PHP-FPM, bukan hanya di CLI
- Memori dan batas file disesuaikan dengan ukuran aplikasi
- Hit rate, memori sisa, dan oom_restarts sudah dicek
- Uji beban sebelum dan sesudah dicatat
- File status sementara sudah dihapus

## Sumber

- <https://www.php.net/manual/en/book.opcache.php>
- <https://www.php.net/manual/en/opcache.configuration.php>
- <https://www.php.net/manual/en/function.opcache-get-status.php>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-mengaktifkan-opcache-php-mengukur-dampaknya
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
