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.






RSS feed for comments on this post.




