WEB Server Performansını Nasıl Arttırırım? -2

Filed in Apache | FreeBSD | Gezegen | Lighttpd 1 Comment

WEB performans arttırımı ile alakalı başlamış olduğum yazıma 2. kısımla devam ediyorum. Bu kısımda sizlere anlatacağım konular altta belirtilmiştir. Performans ile alakalı bahsedeceğim tüm kısımların listesine buradan ulaşabilirsiniz.

1- Giriş

2- Donanım Performans Arttırımı

Sitenize aynı anda giren kişi sayısı haddinden fazla ise sizin de web sitenizde performans arttırımı yapmanızın zamanı gelmiş demektir. Bununla birlikte sitenizde fazla kişi olmamasına rağmen sitenizin performansını arttırarak hem kullanıcıların isteklerini daha hızlı gerçekleştirebilmelerini sağlamış olursunuz hem de ileri bir zamanda sitenize girecek kişi sayısının artmasına karşı önleminizi şimdiden almış olursunuz.

Ölçüm ortamının hazırlanması

Optimizasyonlara başlamadan önce performans arttırımı yapılacak sistemin mevcut durumunu ölçmeliyiz ki yaptığımız performans arttırımından sonra karşılaştırma yapma imkanımız olsun. Bunun için Linux kullanıyor isek LBS i , Windows kullanıyorsak Performans Monitör ü kullanabiliriz.

Performans arttırımındaki en temel amaç RAM i (cacheleme için) olabildiğince fazla kullanma, disk bazlı aktivitelerin minimuma indirilmesidir. Sistemlerde swap alanının olabildiğince kullanılmaması bir başka önemli husustur. Eğer sisteminiz swap alanını kullanmaya başlamış ise bu sizin daha fazla RAM e ihtiyacınız olduğunu göstermektedir.

Optimizasyon yapılacak sistemlerde optimizasyon sırası genelde şu sırada olmalıdır;

  1. Daha fazla RAM
  2. Daha hızlı diskler, RAID konfigürasyonu doğru yapılmış
  3. Daha hızlı CPU

Ölçeklenirlik (Scalability)

Büyük yüke sahip siteler genellikle web server ve database server ı fiziksel olarak ayrı makineler üzerinde çalıştırırlar. Buna rağmen az yüke sahip sitelerde böyle bir şeye gerek yoktur. Bunun yanında load-balance uygulamasıyla bir sitedeki web server sayısı da arttırılabilir. Bu tip durumlarda farklı web serverların aynı database ve file servera bağlanması gerekebilir. Bu tip çalışma şekline clustering diyoruz. Aynı çalışma ihtiyaca göre database server tarafında da yapılabilmektedir.

Donanım Performans Arttırımı

NOT: Optimizasyon ile alakalıa yapabileceğiniz en hızlı ve en verimli gelişme web serverınızdak RAM miktarını olabildiğince arttırmaktır. RAM miktarınız arttırarak swap alanının kullanımını engelleyerek diske erişimleri azaltacak daha fazla kullanıcının işlem yapmasını sağlayacaksınız.

  • Yüksek işlemci kapasitesine sahip olmak iyi bir performans arttırım kuralıdır. Örneğin son zamanlarda sıklıkla kullanılan dual veya quad core işlemcilerin kalitesi gayet yüksek düzeydedir.
  • Eğer maddi imkanlarınız yeterli düzeyde ise SATA diskler yerine  SCSI diskleri tercih edin. SATA diskler CPU kullanımının artmasına neden olur. SCSI disklerde entegre işlemciler bulunduğu için böyle bir durum söz konusu değildir. Eğer SATA disklere sahip iseniz, anakartınızın ve diğer driver larınızın NCQ (Native Command Queuing) özelliğini desteklemesi gerektiğini kontrol edin.
  • Disklerinizin dönüş hızları ne kadar fazla ise database verilerinize o kadar hızlı ulaşabilirsiniz. Bu nedenler RPM miktarları fazla olan diskleri tercih edin. Ör : 15000RPM
  • SWAP alanını doğru belirleyin. Genel tavsiye olarak bu alanın RAM miktarının 4 katı olması gerekir.
  • Disklerinizi uygun RAID konfigürasyonu ile birlikte kullanın.
    • Donanımsal RAID controller kullanın.
    • RAID 10 kullanımı tercih edin. NOT: Web server ve database server ın mirror olmayan disklerde olmasına dikkat edin.
  • Gigabit ethernet kartı kullanın. Özellikle web server ve database server ın ayrı hostlarda olması durumunda bu durum daha önemlidir.
  • Network kartının ayarlarını kontrol edin. Kart üzerindeki buffer kullanımı miktarını, giriş/çıkış descriptorlarını arttırarak ve kart üzerinde off-loading TCP checksum hesaplama işlemini aktif ederek (bu hesaplamayı CPU yaptırmadan) ciddi performans kazanımı elde edebilirsiniz.
  • 300 kullanıcılı sistemde yapılan stres testinin buradan bir inceleyin.
  • Aynı sistemin network trafik miktarını ve server yükünü buradan bir inceleyin.
  • Burada yapılmış bir uygulama görülmektedir. Bir inceleyin derim.
  • SFSU üniversitesinde yapılmış bir prezentasyon bulunmaktadır. Burayı da bir incelemenizi tavsiye ederim.

KAYNAKLAR;

http://blog.digitalstruct.com/2008/01/31/performance-tuning-overview/

http://blog.stuartherbert.com/php/2008/01/31/more-about-performance-tuning/

http://httpd.apache.org/docs/2.0/misc/perf-tuning.html#page-header

http://docs.moodle.org/en/Performance

http://docs.moodle.org/en/lighttpd

http://www.devside.net/articles/apache-performance-tuning

http://linuxbox.co.uk/vbulletin_performance_tuning.php

Share
PDF Creator    Send article as PDF   

, ,

En Süper WEB Server için 5 Elementin Birleşmesi (FreeBSD 8.0, PHP52, Lighttpd, PostgreSQL ve Ben)

Filed in FreeBSD | Genel | Gezegen | Linux | PostgreSQL Leave a comment

Herkesin gönlünde yatan bir server vardır. Öyle bir server ki hem stabil, hem performanslı hem de hızlı çalışsın dediğiniz olmuştur. Böyle bir server üzerinde web servisi çalıştırmak kadar zevkli birşey yoktur benim için…
İşte bu vesileyle yaptığım araştırmalar neticesinde en iyi web server için kullanılabilecek komponentleri topladım ve size bu 5 elementi sunuyorum;

  • FreeBSD 8.0 Release

  • PHP52

  • Lighttpd 1.4.26

  • PostgreSQL 8.4.4

  • Ben :)

Şimdi de sözü fazla uzatmadan bu elementleri birleştirip ortaya harika birşey çıkaralım. (Kurulum testi sanal makinede yapılmış ve başarılı olunmuştur.);

FreeBSD 8.0 Kurulumu;

FreeBSD kurulumu asıl konumuz olmadığı için burada OS kurulumu üzerinde detaylı olarak durmayacağım. Buradan 8.0 Release versiyonu indirerek minimum seviyede kurulum yapalım. Minimum kurulum yapmamızın sebebi sisteme istenmeyen ve yük getireceğini düşündüğümüz yazılımların gereksiz yere kaynak harcamasını engellemektir.

Kurulum yapıldıktan sonra kişisel olarak port ağacını, kabuk olarak bash programını kurdum. Daha sonra uzaktan ssh ile bağlanıp işlemlere devam ettim.

UYARI: Kurulum yapıldıktan sonra uzaktan ssh giriş denemelerinde root girişine sistem izin vermemektedir. Bu yüzden kurulum sırasında oluşturulan ikincil kullanıcının grubunun wheel olarak değiştirilmesi gerekmektedir. Ben bu tarafı kullanıcıyı rmuser komutu ile silip adduser ile tekrar oluşturarak çözdüm. Siz de böyle yapabilirsiniz.

PHP52 Kurulumu;

Kuruluma başlamadan önce port ağacını güncelleyelim.

#portsnap fetch
#portsnap extract

Güncellemeden sonra port ağacından php nin 5.2 versiyonu bulup yükleyelim.

# cd  /usr/ports/lang/php52
 # make
 # make install
 # make clean

Kurulum tamamlandıktan sonra php nin db desteği gibi bize lazım olacak uzantılarını extension dan işaretleyip yükleyelim;

NOT: pgsql uzantısını listeden seçmeyi unutmayın!

ctype:    The ctype shared extension for php
curl:    The curl shared extension for php
dom:      The dom shared extension for php
gd:       The gd shared extension for php
imap:     The imap shared extension for php
mbstring: The mbstring shared extension for php
mcrypt:   The mcrypt shared extension for php
mysql:    The mysql shared extension for php
mysqli:   The mysqli shared extension for php
pcre:     The pcre shared extension for php
posix:  The posix shared extension for php
session:  The session shared extension for php
simplexml: The simplexml shared extension for php
xml:  The xml shared extension for php
xmlreader: The xmlreader shared extension for php
xmlwriter: The xmlwriter shared extension for php
zlib:  The zlib shared extension for php
# cd /usr/ports/lang/php52-extensions
 # make
 # make install
 # make clean

Lighttpd 1.4.26 Kurulumu;

Lighttpd, yüksek performanslı sistemler için dizayn edilmiş güvenli, hızlı, uysal ve oldukça esnek bir web serverdır. Diğer web serverlar ile kıyaslandığında oldukça düşük memory ve cpu kullanımına sahip olduğu gözlenmektedir. Öne çıkan özellikleri FASTCGI, CGI, Auth, Output-Compression, URL-Rewriting ve daha birçokları ile yük problemi çeken sistemler için idealdir. Aynı zamanda kurulumu da oldukça basittir.

Portlardan yerini belirleyip kuralım;

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

açılışta otomatik çalışması için rc.conf a giriş yapalım;

# echo 'lighttpd_enable="YES"' >> /etc/rc.conf

test yapabilmek amacıyla www klasörü altına bir html dosyası oluşturalım;

# mkdir -p /usr/local/www/data
# echo 'HELLO. LIGHTTPD WORKS' > /usr/local/www/data/index.html

lighttpd.conf dosyasını açarak bazı değişiklikler yapalım;

# nano +43 /usr/local/etc/lighttpd.conf

bu ifadeyi…

server.errorlog             = "/var/log/lighttpd.error.log"

bu şekilde değiştirelim…

server.errorlog             = "/var/log/<em>lighttpd/</em>lighttpd.error.log"

119. satırda bu ifadeyi..

accesslog.filename          = "/var/log/lighttpd.access.log"

bu şekilde değiştirelim…

accesslog.filename          = "/var/log/<em>lighttpd/</em>lighttpd.access.log"

PHP nin FASTCGI modülünü kullanmak için lighttpd.conf dosyasında..

modülün enable olduğuna emin olun;

server.modules              += ( "mod_fastcgi" )

aşağıdaki satırları ekleyelim…

fastcgi.server = ( ".php" =>
( "localhost" =>
                     (
                        "socket" => "/tmp/php-fastcgi.socket",
                        "bin-path" => "/usr/local/bin/php-cgi"
                      )
                   )
)

log dosyaları klasörü oluşturup haklarını düzenleyelim;

# mkdir /var/log/lighttpd
# chown www:www /var/log/lighttpd

lighttpd servisini çalışmasını başlatın,

# /usr/local/etc/rc.d/lighttpd start

Browser ınıza sistemin ip sini yazıp “HELLO. LIGHTTPD WORKS” ifadesinin yazıp yazmadğını kontrol ediniz.

PostgreSQL 8.4.4 Kurulumu;

8.4 ü portlarda bulup server ve client versiyonlarını yükleyelim.(Server yüklenince clientta otomatik yüklenir.)

# cd /usr/ports/databases/postgresql84-server
# make config
# make install clean

açılışta otomatik başlama için rc.conf ayarları yapılır,

# echo 'postgresql_enable="YES"' >> /etc/rc.conf

ilk database oluşturma işlemi başlatılır,

# /usr/local/etc/rc.d/postgresql initdb

komut çıktısı;

/usr/local/etc/rc.d/postgresql initdb
The files belonging to this database system will be owned by user "pgsql".
This user must also own the server process.
The database cluster will be initialized with locale C.
The default text search configuration will be set to "english".
fixing permissions on existing directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 40
selecting default shared_buffers ... 28MB
creating configuration files ... ok
creating template1 database in /usr/local/pgsql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.
Success. You can now start the database server using:
    /usr/local/bin/postgres -D /usr/local/pgsql/data
or
    /usr/local/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

postgresql servisi başlatılır;

# /usr/local/etc/rc.d/postgresql start

Tüm kurulum işlemleri tamamlanmıştır. Artık yeni ve süper server ınız kullanıma hazırdır. İyi günlerde kullanınız. Kurulum sırasında karşılaştığınız hataları burada benimle paylaşırsanız yardımcı olmaya çalışırım…

NOT: Tüm kurulumun doğru çalışıp çalışmadığını kontrol etmek amacıyla phppgadmin programını buradan indirip sisteminize kurmayı deneyebilirsiniz.

KAYNAKLAR;

http://www.cyberciti.biz/tips/howto-install-lighttpd-on-freebsd.html

http://jasonk2600.wordpress.com/2010/01/11/installing-postgresql-on-freebsd/

http://www.linuxgeek.ca/wordpress/?p=130

http://www.cyberciti.biz/faq/howto-setup-lighttpd-fastcgi-php-server/

Share
Create PDF    Send article as PDF   

, , , , ,

TOP