ipsure logo
Logo and Language
Giriş ikonu Dil seçim ikonu
Merhaba, misafir
*NIX Aktif kategori menüsü sol parantez Aktif kategori menüsü sağ parantez Uygulamalar bloğunun başlık resmi Uygulamalar başlık resmi sağ bloğu Uygulamalar başlık resmi son menü bloğu
MS İPUCU PKI PROJELER WORDPRESS YEDEKLEME English UYGULAMALAR HİZMETLER IT BUSINESS İLETİŞİM HAKKIMIZDA REFERANSLAR KOŞULLAR RSS
Ana sayfa Uygulamalar Hizmetler IT Business İletişim Hakkımızda Referanslar Kullanım Koşulları RSS

27/03/2010

eAccelerator ve Paylaşılan Bellek Ayarı ile PHP Hızlandırma

PHP hızlandırma kavramı, her istekte kaynak kodunun ayrıştırılmasını ve derlenmesini önlemek üzere PHP scriptlerinin derlenmiş durumda ön bellekte tutulması esasına dayanan performans arttırıcı yöntem olarak ifade edilebilir. Scriptlerin paylaşılan bellek içersinde saklanması, tüm hızlandırma konseptinin asıl bölümünü oluşturduğu gibi aynı zamanda en iyi sonuç için başlıca olgudur. İyi oluşturulmuş bir hızlandırma uygulaması, hızı 1 ile 10 kat arasında arttırken sunucu yükünü de azaltacaktır.

Eğer donanım etkinliğini bir kenara bırakıp uygulama konularına odaklanırsak, hızlandırma başarısı sunucu tipi (apache, lighttpd, …), PHP scriptlerinin kendi içindeki yürütme süreleri, kodlama kalitesi, CMS türü (eğer kullanılmaktaysa) gibi birçok faktöre bağlıdır. Bu nedenle, özellikle bu konu üzerine yayımlanmış çeşitli kıyaslama tablolarına dayanarak bir hızlandırıcının diğerinden daha üstün olduğunu kesin bir şekilde ortaya koyamayız. Bu makalede, FreeBSD 8.0-RELEASE-p1 işletim sisteminde yer alan PHP5 üzerine eAccelerator 0.9.5.3 konuşlandırırken aslında daha çok konunun paylaşılan bellek tarafını vurguluyor olacağız.

İlerlemeden önce ports dizininizi güncellemenizi tavsiye ederim.

# portsnap fetch
# portsnap update

İlk önce sistemimizdeki ilgili paketleri kontrol edelim;

# php -v
PHP 5.2.11 with Suhosin-Patch 0.9.7 (cli) (built: Dec 29 2009 18:28:11)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
# apachectl -v
Server version: Apache/2.2.14 (FreeBSD)
Server built:   Dec 29 2009 15:39:28

Kurulum ile devam etmek üzere ports koleksiyonu içerisindeki eaccelerator klasörünü ziyaret etmeliyiz;

# cd /usr/ports/www/eaccelerator
# make install clean

eAccelereator uygulamasını ister Zend, ister PHP extension olarak yapılandırmak ve yüklemek isteyelim, php.ini dosyasını düzenlemeli ve içerisine uygun satırları eklemeliyiz. Eğer PHP extension olarak yürütmeyi tercih ederseniz uygulamayı extension=”eaccelerator.so” parametresi ile çağıracaksınız. Ben, Zend extension olarak çalıştırmayı tercih ettiğim için eaccelerator.so kütüphanesi için tam yolu belirteceğim;

# vi /usr/local/etc/php.ini
;---------------------- eAccelerator ---------------------

zend_extension="/usr/local/lib/php/20060613/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="1"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

;----------------------------------------------------------

eAccelerator’ı devreye almadan önce, hızlandırma yönteminin ve makalemizin temel konusu olan paylaşılan bellek meselesi üzerine duracağım.

Varsayılan eaccelerator.shm_size=”16″ ayarı, eAccelerator’ın PHP scriptlerini önbelleğe almak için ayırması gereken megabyte cinsinden paylaşılan bellek miktarını kontrol etmenizi sağlayacaktır. “0″ değeri sistemde tanımlı varsayılan miktarı kullandıracaktır. FreeBSD ve diğer *NIX türevlerinde paylaşılan bellek miktarı, eAccelerator’ın verimli olabilmesi için gerekenden çok daha azı ön tanımlanmış olarak gelir. FreeBSD’de bir prosese tahsis edilebilecek maksimum bellek miktarı, kern.ipc.shmmax (kern.ipc.shmmax: Maksimum paylaşılan bellek dilimi hacmi, IPC=inter-process communication) kernel yapılandırma parametresine atanan rakam tarafından sınırlandırılır. Eğer bu rakamdan daha fazlasını ayırırsanız eAccelerator başlarken problem yaşayabilir. En iyi performans için bu parametre ile oynamalı ve en iyi uygulama için eaccelerator.shm_size değerini uygun şekilde kalibre etmelisiniz. Özellikle aynı sunucu üzerinde veritabanı ve ek olarak java uygulamaları da çalıştırıyorsanız shmax değerini en fazla fiziksel belleğinize kadar kademeli olarak arttırmalı ve değerlendirmelisiniz. FreeBSD 7.2 ve üzeri sürümlerinin 2GB.’den yüksek paylaşılan bellek miktarını destekleyebildiğinin altını çizerim (kern.ipc.shmmax=2147483648).

Şimdi FreeBSD 8.0 üzerinde aslında kuruluma bağlı olarak değişebilecek varsayılan değeri kontrol edelim;

# sysctl -a | grep shmmax
kern.ipc.shmmax: 33554432

Yukarıdaki parametrede verilen değer byte cinsinden varsayılan 32 MB.’a tekabül eder. Bu parametre bir eşitliğin parçası olduğu için arttırmak istediğimizde bir başka parametreyi, kern.ipc.shmall (Paylaşılan bellek için kullanılabilir maksimum page sayısı) parametresini uygun bir şekilde ayarlamamız gerekecektir.

kern.ipc.shmall = kern.ipc.shmmax / hw.pagesize

ipc.shmall’un varsayılan değeri aşağıdaki komutla görülebilir;

# sysctl -a | grep shmall
kern.ipc.shmall: 8192

Peki hw.pagesize değerimiz ne ?

# sysctl -a | grep hw.pagesize
hw.pagesize: 4096

Yukarıdaki denklemi göz önünde bulundurarak shmall parametresini, kern.ipc.shmmax değerinin hardware page hacmine bölündüğündeki değere eşit olacak şekilde ayarlayabiliriz. Örneğin 512 MB. paylaşılan bellek istiyorsak byte cinsinden kern.ipc.shmmax=536870912 ve kern.ipc.shmall=131072 değerlerini atamalıyız.

( 131072 = 536870912 / 4096 )

Değerleri değiştirmek ve yeniden başlatma gerekmeksizin yürütme sürecinde devreye alarak değerlendirmek için;

# sysctl -w kern.ipc.shmmax=536870912
kern.ipc.shmmax: 33554432 -> 536870912
# sysctl -w kern.ipc.shmall=131072
kern.ipc.shmall: 8192 -> 131072

PHP ve ötesinde MySQL performansı birbirini o ve ya bu şekilde etkileyen çok çeşitli kernel yapılandırma parametrelerine dayanmakta olduğu için söz konusu eAccelerator entegrasyonu vesilesiyle küçük miktarlarda arttırıp azaltma yoluyla türlü değerlerin etkilerini deneyimlemek üzere kendi sysctl.conf‘unuzu inşa etmeye başlayabilirsiniz. Gözlemledikten ve sunucu uygulamalarınıza ilişkin verimliliğin geliştiğine, kararlılığın korunduğuna emin olduktan sonra bu parametreleri direk olarak /etc/sysctl.conf içerisine
ekleyerek ayarlarınızın sistemin yeniden başlatılmasından sonra da kalıcı olarak devam etmesini sağlayabilirsiniz.

kern.ipc.shmmax=536870912
kern.ipc.shmall=131072

Şimdi eAccelerator yapılandırmasına geri dönelim ve paylaşılan bellek ayarlarına gerçekleştirdiğimiz müdahaleyi takiben eaccelerator.shm_size=”256″ yeni değerini ayarlayalım.

eAccelerator scriptleri saklamak için paylaşılan belleğe atmanın yanı sıra ek olarak bir disk alanı da kullanır. Sonuç olarak, bu disk alanını /tmp içerisinde yaratarak erişim izni ayarlarını eAccelerator’ın altında çalıştığı kullanıcı için yazılabilir şekilde düzenlemeliyiz;

# mkdir /tmp/eaccelerator
# chown www /tmp/eaccelerator
# chmod 0644 /tmp/eaccelerator

Web sunucunuzu yeniden başlatarak eAccelerator’ı devreye sokun.

# apachectl restart

Devreye girip girmediğini kontrol edin;

# php -v
PHP 5.2.11 with Suhosin-Patch 0.9.7 (cli) (built: Dec 29 2009 18:28:11)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
 with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator

Eğer başarıyla yüklendiyse, alt dizinler ve kaydedilen scriptler cache dizininde belirecektir;

# cd /tmp/eaccelerator/1/1/
# ls -al
-rw-------   1 www   wheel   11376 Mar  9 18:29 eaccelerator-101.20312741
-rw-------   1 www   wheel   28760 Mar  9 18:29 eaccelerator-101.30312741
-rw-------   1 www   wheel   17400 Mar  9 18:29 eaccelerator-101.40312741
-rw-------   1 www   wheel    3168 Mar  9 18:29 eaccelerator-101.50312741
-rw-------   1 www   wheel  124952 Mar  9 18:29 eaccelerator-101.89212741

Alternatif olarak aşağıdaki basit içerikle ana web dizininizde bir test.php scripti hazırlayıp çalıştırdığınızda, ayrılan bellek miktarı, bellekte saklanan script adedi, yapılandırma direktifleri ve değerleri gibi oldukça kafi miktarda bilgiyi gözlemlemenizi sağlayacak şekilde PHP info sayfası içerisinde eAccelerator için ayrı bir bölüm oluşturulduğunu farkedeceksiniz.

<?php
 phpinfo();
?>

Son olarak debug etme amacı dışında loglama opsiyonunu aktif etmenizi tavsiye etmem. İlave yapılandırma seçeneklerine http://www.eaccelerator.net/wiki/Settings sayfasından  ulaşabilirsiniz.

Related Posts with Thumbnails
RSS Beslemelerimize ye olun FeedBurner yoluyla email yelii FeedBurner yoluyla RSS yelii

İlgili Makaleler

  1. eAccelerator Yüksek Yük Ortalaması Sorunu

Yorum yapılmamış »

Geri İzlemeler

Henüz bir geri izleme linki bulunmamakta.

Okuyucu Yorumları

Henüz bir okuyucu yorumu mevcut değil.

RSS feed for comments RSS feed for comments on this post. Geri İzleme URL'si.

Yorum yapın