PHP performansını artırmak için OPcache ve Redis nasıl optimize edilir?

PHP performansını artırmak için OPcache ve Redis nasıl optimize edilir?
Tepki Ver

 

PHP performansını en üst düzeye çıkarmak için OPcache ve Redis iki farklı ama birbirini tamamlayan katmanda birlikte kullanılır:
  • OPcache (Bayt Kodu Önbellekleme): PHP kodlarının derlenmiş bayt kodunu (bytecode) RAM’de saklayarak her HTTP isteğinde dosyanın yeniden okunmasını ve derlenmesini önler; bu da uygulamada 3 ila 5 kat performans artışı sağla
  • Redis (Veri ve Oturum Önbellekleme): Sık erişilen veritabanı sorgu sonuçlarını, uygulama verilerini ve oturumları (session) bellekte tutarak disk I/O ve veritabanı yükünü hafifletir.
1. OPcache Optimizasyonu
OPcache yapılandırması php.ini veya /etc/php/.../mods-available/opcache.ini dosyası üzerinden ayarlanı. Yüksek performans için önerilen parametreler şunlardır:

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=2
opcache.fast_shutdown=1
opcache.save_comments=1

; Canlı (Production) Ortam İçin Kritik Ayar:
opcache.validate_timestamps=0

 

  • opcache.memory_consumption: Önbellek için ayrılan RAM miktarıdır. Küçük projelerde 128 MB yeterli gelirken, WordPress, Laravel veya Magento gibi yapılarda 256 MB – 512 MB aralığı tercih edilmelidir.
  • opcache.interned_strings_buffer: Tekrarlanan dize (string) yapıları için ayrılan bellektir (genellikle 16 MB veya 32 MB).
  • opcache.max_accelerated_files: Önbelleğe alınacak maksimum PHP dosyası sayısıdır. Çok sayıda eklenti veya kütüphane içeren projelerde 20.000 – 30.000 seviyelerine çıkarılmalıdır.
  • opcache.validate_timestamps:
    • 1 yapıldığında belirtilen saniye aralığıyla (revalidate_freq) dosyaların değişip değişmediği kontrol edilir.
    • 0 yapıldığında ise dosya değişiklik kontrolleri kapatılır ve fazladan %5–10 performans kazancı elde edilir. Önemli: validate_timestamps=0 kullanıldığında koddaki güncellemelerin geçerli olması için systemctl reload php-fpm komutuyla PHP-FPM hizmeti yeniden başlatılmalı veya OPcache temizlenmelidir.
2. Redis Optimizasyonu ve Kullanımı
Redis’i PHP ile kullanmak için öncelikle sunucuya redis-server ve PHP eklentisi olan php-redis kurulmalıdır.
Veritabanı ve Obje Önbellekleme
Maliyetli veritabanı sorgularının sonuçlarını Redis üzerinde tutarak veritabanına giden istek sayısı azaltılır:

<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1’, 6379);

function getCachedData($key) {
global $redis;

// Önce Redis önbelleği kontrol edilir
$cached = $redis->get($key);
if ($cached !== false) {
return json_decode($cached, true);
}

// Veri önbellekte yoksa veritabanından çekilir ve Redis’e yazılır (Örn: 1 saat / 3600 sn)
$data = expensiveDatabaseQuery($key);
$redis->setex($key, 3600, json_encode($data));

return $data;
}
?>

 

Oturum (Session) Yönetimi
PHP oturumlarının disk yerine Redis üzerinde saklanması session I/O işlemlerini hızlandırır ve birden fazla sunucunun çalıştığı yapılarda oturum paylaşımını kolaylaştırır. php.ini dosyasında şu yapılandırma kullanılır:
session.save_handler = redis session.save_path = “tcp://127.0.0.1:6379”
Birlikte Çalışma Stratejisi
  1. Temel Katman (OPcache): Sunucudaki PHP dosya derleme yükünü tamamen ortadan kaldırmak için OPcache sürekli aktif tutulmalıdır.
  2. Veri Katmanı (Redis): OPcache kurulduktan sonra veritabanı sorgularının ve geçici uygulama verilerinin hızlandırılması için Redis devreye alınmalıdır.
💡PHP-FPM süreç havuzu (pm.max_children) ayarlarını sunucunuzun mevcut RAM kapasitesine göre nasıl hesaplayıp yapılandıracağınızı incelemek isterseniz Alttaki Linkte tıklayabilirsiniz.?

 

 

Yazar Profili
Gurbetseli Yönetici Tüm Yazılar

bilgeo.com Teknoloji Haberleri, Program Çözümleri, Mobil Uygulamalar ve İnternet Dünyası Hakkında Bir Çok Bilgiyi Güncel Olarak Takip Edebileceğiniz Geniş Kapsamlı Blog Sitesi.

Kullanıcıya ait herhangi bir sosyal medya veya iletişim bilgisi bulunmamaktadır.

515 Yazı

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir