Tem 17 2010

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

Category: Apache,FreeBSD,Gezegen,LighttpdBayram Karagöz @ 01:20

Yazımıza 3. kısım ile devam ediyorum. Bu kısımda sizlere performans ile alakalı anlatacaklarım altta sıralanmıştır. Tüm listeye  buradan ulaşabilirsiniz.

3- İşletim Sistemi Performans Arttırımı

4- WEB Server Performans Arttırımı

a) PHP Performans Arttırımı

b) Apache Performans Arttırımı

c) Lighttpd, NginX ve Cherokee Performans Arttırımı

3- İşletim Sistemi Performans Arttırımı

  • Grafiksel arayüzü olmadan kurulabilmesi, lisans maliyetinin olmaması nedeniyle Linux kullanmanız tavsiye edilir. Bunun yanında Unix bazlı sistemler(favorim tabiiki FreeBSD), Windows ve MAC OS X kullanabilirsiniz. Eğer çok işlemcili bir servera sahipseniz, SMP kullanımı için Solaris te kullanabilirsiniz.
  • İşletim sistemlerinin kendi optimizasyonlarını inceleyerek bunlar üzerinde gelişme kaydediniz.
    • Linux için buradan yararlanabilirsiniz.
    • Linux hdparm komutu ile çoklu sektore ve DMA ye okuma/yazma işlemini aktif edebilirsiniz. Ör: hdparm -m16 -d1
    • Diskleri async ve noatime seçenekleriyle birlikte mount ediniz.

4- WeB Server Performans Arttırımı

  • Firefox ve firebug extension unu kurarak her sayfadaki componentlerin açılma sürelerini incelemiş olursunuz. Bununla birlikte  Yslow extension ile sitenizin yahoo nun hızlı bir web sitesi için 14 kurala (video) uyup uymadığını veya ne kadar uyduğunu verdiği puanlar ile görebilirsiniz.

a) PHP Performans Arttırımı

  • CPU yükünü hafifletmek amacıyla PHP accelerator (PHP hızlandırıcıları) kullanmanız şiddetle tavsiye edilir. APC, PHPA, Xcache ve eAccelerator PHP hızlandırıcılara örnek olarak verilebilir. Bu hızlandırıcıları seçerken seçtiğiniz programın kullandığınız PHP versiyonu ile düzgün çalışabildiğine emin olun.
  • Cachelenmiş PHP sayfalarını TMPFS dosya sistemine koyabilirsiniz. Böylelikle okuma/yazma işlemlerinde performans artışı sağlarsınız. Fakat server kapanmalarında, restart veya web server restart durumlarında bu cachelenmiş dosyaların silinebileceğini unutmamak gereklidir. Dolayısıyla web servisini restart etmeden önce cachelenmiş dosyanın içeriğini kopyalayıp restart ettikten sonra tekrar geri kopyalama yapın.
  • Apache/IIS ISAPI module yüklendiğinde PHP nin performansı CGI ya göre daha iyi olur.
  • php.ini dosyasındaki memory_limit miktarını kontrol edin. PHP 5.2.1 de bu değer default olarak 128M atanmıştır. İhtiyacınıza göre bu değeri düşürün.

Nasıl Yüklenilir?

b) Apache Performans Arttırımı

Burada yapacağınız iyileştirmeler genel olarak httpd.conf dosyasında yapacağınız değişikliklerdir.

  • Eğer apache serverı windows üzerinde kullanıyorsanız,  Apache Lounge taki bilgilerden yararlanarak resmi bir apache server indirmeye göre performans ve stabilite  iyileştirmelerini yapabilirsiniz. Fakat şunuda göz önünde bulundurmak gerekiyor ki bu kurulum resmi olmayan bir kurulum olacağından hiçbir zaman resmi kurulum ile karşılaştırılamaz.
  • MaxClients değişkenini aşağıdaki formule göre ayarlayın. Bu değişken apachenin eşzamanlı olarak yapılan max. kaç isteğe cevap verebileceğinin sayısıdır. Bu değişkenı kullanıma elverişli olan RAM miktarının %80 ini yedek olarak kullanmak üzere ayırabilirsiniz.
MaxClients = Total available memory * 80% / Max memory usage of apache process
  • Apache prosesinin memory kullanma miktarı yaklaşık 10MB civarındadır. Bu yüzden pratik olarak elverişli RAM’ı 10MB lık parçalara bölerek MaxClients değerini elde edebiliriz. Apache prosesinin max. Memory kullanım miktarını öğrenebilmek için aşağıdaki komutu komut satırına yazabilirsiniz;
#ps -ylC httpd --sort:rss

Maxclients değerini 256 nın da üzerine çıkarmanız gerekiyorsa, ServerLimit değerini de değiştirmeniz gerekir.

UYARI: Maxclients değerini elverişli RAM in de üzerinde olacak şekilde ayarlarsanız swap alanı kullanılmaya başlayacağından performansta önemli düşüşler yaşarsınız.

  • Apachenin kullanacağı modül sayısını bilerek tam olarak ihtiyaca uygun olan modülleri aktif edin. Kullanmadığınız modüller aktif olarak kaldığında RAM in belirli bir miktarını kullanacak bu da performans düşüklüğüne neden olacaktır.
  • En son Apache versiyonunu kullanın. Örneğin Apache 2 versiyonu memorynin düzgün ve az kullanması üzerine geliştirilmiş özelliklere sahiptir.
  • Unix/Linux sistemlerde MaxRequestsPerChild sayısını 20-30 arasına düşürmeye çalışın.
  • Yoğun yüke sahip iseniz KeepAlive Off tanımlayarak bu KeepAlive işlemini durdurun(sitenizde link veya upload edilmiş resim dosyası bulunmuyorsa bu işlemi yapabilirsiniz) veya KeepAliveTimeout değerini 2 ile 5 arasında ayarlayın. Bu değer default olarak 15 sn ayarlıdır. Değerin fazla olması idle da bekleyen proses sayısının artacağı manasına gelir. Bu değerin size en uygun olanını seçmek için kullanıcılarınızın yaklaşık olarak sayfalarınızın gelmesi için ne kadar beklediklerini öğrenebilir veya test edebilirsiniz. Değeri değiştirdikten sonra CPU kullanımını gözleyerek çalışan httpd proseslerinde yükselme olup olmadığını kontrol edin.
  • Bir önceki performans iyileştirmesiyle alakalı önemli bir hususu belirtmek isterim. Eğer sitenizde SSL aktif edilmiş ise ve apache kullanıyorsanız KeepAlive Timeout değerini en az 60 sn yapın. Çünkü Internet Explorer da bununla alakalı bir problem mevcut(Şimdi düzeltildimi bilemiyorum).
  • KeepAlive Off değerini kapatmak yerine alternatif olarak bu değeri ON yaparak ve web server önüne HTML dosyalarının resimleriyle beraber cache lenmesini sağlayacak bir Reverse Proxy Server koyarak performans arttırımı yapabilirsiniz.
  • .htaccess dosyası kullanmıyorsanız AllowOverride parametresini None yaparak .htaccess kontrolünü engelleyin.
  • DirectoryIndex değerini doğru bir şekilde ayarlayarak web serverın içerik-araştırması (content-negotiation) yaparak zaman kaybetmesini engelleyebilirsiniz. Aşağıda bunun için bir örnek görülmektedir.
DirectoryIndex index.php index.html index.htm
  • Server üzerinde geliştirme yapmıyorsanız ExtendedStatus Off ve mod_info ile mod_status modüllerini disable edin.
  • HostnameLookups Off yaparak DNS sorgulaması gecikmelerini önleyebilirsiniz. Default olarak bu şekildedir.
  • TimeOut  değerini 30 ile 60 sn arasında ayarlayın.
  • Options yönergesini klasör taramasını önleyecek şekilde ayarlayın. Bu sayede disk I/O miktarını düşürmüş olursunuz. Aşağıda örnek konfigürasyon görülmektedir.
Options -Indexes FollowSymLinks
  • Cacheleme – web server performansı için hayati önem taşıyan durumdur cacheleme. Bir sayfayı kullanıcıların her girişinde tekrar tekrar açıp resimleri, flashları getirmeye çalışması server için büyük bir yüktür. Bu nedenle sürekli olarak değişmeyen öğelerin (resim olabilir, flash olabilir) cachelenmesi sayfanın kısa sürede gelmesi için çok önemlidir.

Cacheleme OS ye göre değişebilir. Fakat temel olarak 2 adımda incelenir.

  1. mode_expires ı kurun ve aktif edin – dökümantasyonlardan ve man sayfalarından yararlanabilirsiniz.
  2. Virtual server tanımlamasında root dizinin <directory> kısmına aşağıdaki kod parçasını ekleyin.(.htacces dosyasına da AllowOverride parametresini ON olarak set ettikten sonra ekleyebilirsiniz .)

<IfModule mod_expires.c>
 ExpiresActive On
 ExpiresDefault "access plus 1 seconds"
 ExpiresByType text/html "access plus 1 seconds"
 ExpiresByType image/gif "access plus 1 week"
 ExpiresByType image/jpeg "access plus 1 week"
 ExpiresByType image/png "access plus 1 week"
 ExpiresByType text/css "access plus 1 week"
 ExpiresByType text/javascript "access plus 1 week"
 ExpiresByType application/x-javascript "access plus 1 week"
 ExpiresByType text/xml "access plus 1 seconds"
 </IfModule>

Yukarıdaki ifade HTML ve XML dosyaları haric dinamik olarak değişen tüm dosyaları cachelemektedir. Cache zamanını da resimlerinizin değişme süresine göre ayarlayabilirsiniz.

Ayrıntılı bilgi için www.metaskills.net adresini inceleyebilirsiniz.

c) Lighttpd, NginX ve Cherokee Performans Arttırımı

Web server performansını lighttpd, nginx or cherokee gibi hafif web server programları kullanarak ve PHP ile FASTCGI-mode ile kombine ederek arttırabilirsiniz.

Lighttpd web server uygulaması tamamen yüksek miktarlarda yüke sahip serverların memory ve disk I/O kullanımlarının en düşük ve en iyi düzeyde kullanılması için tasarlanmıştır.

Memory ve disk kullanımları sınırlı seviyede olan sistemler için kullanılması gayet uygundur.

Alternatif olarak lighttpd and nginx web uygulamaları load balancer (yük dengeleyici) ve/veya reverse proxy olarak kullanılarak yük dağıtım işlevi görebilirler. Bu programlar yüksek trafiğe sahip binlerce serverda denenmiş ve basit konfigürasyonlarla başarılı bir şekilde kullanılmaktadır.

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

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
PDF Creator    Makaleyi PDF formatında gönder

Etiketler: , , , , , , , ,


Tem 01 2010

PostgreSQL Performans Tuning

Category: FreeBSD,Genel,Gezegen,PostgreSQLBayram Karagöz @ 16:53

Son Güncelleme : 19.07.2010

Default postgresql kurulumu performans tan daha çok daha geniş kitleye hitap etmek amacıyla konfigüre edilmiştir. Ayarlar genel sistemler için uygundur fakat genelde performans tarafında normalin altındadır. Bu sebeple sistemlerden maximum performans bekliyorsak sistemimize özel performans ayarları yaparak postgresql in çalışmasını daha da iyileştirebiliriz.

Postgresql ayarları farklı yollardan değiştirilebilir fakat en genel yoldan postgresql.conf dosyası vasıtasıyla istediğimiz değişikliği yapabiliriz. Spesifik ayarlar versiyondan versiyona değişiklik gösterebilir. PostgreSQL de yapılabilecek tüm ayarları ve son değerlerini pg_settings tablosunu kontrol ederek görebilirsiniz.

postgresql.conf dosyasındaki ayarlarınızın etkin olması için genelde postmaster servisini restart etmeniz gerekir. Daha sonra değişikliğin aktif olduğuna emin olmak için “SHOW config_parametresi” komutunu kullanabilirsiniz. “SHOW all” komutu ile tüm değerleri görebilirsiniz.

Postgresql performans arttırımı için şimdi anlatacağım top 10 listesindeki işlemleri uygulamanız sonucunda sisteminiz farkedilir bir şekilde hızlanacaktır. Tabiiki en iyi performans için ayarların hatasız yapılması ve her sistemin kendine göre en uygun ayarları belirlemesi gerekmektedir.

Burada anlatılacak performans ayarları sadece postgresql.conf ta yapılabilecek değişikliklerdir. Oysa bu sadece performans yükseltmenin ufak bir parçasıdır. Diğer iyileştirme işlemlerini daha sonraki makalelerimde anlatmayı düşünüyorum.

İşlemlere başlamadan önce postgresql.conf dosyasını yedeklemenizi öneririm.

#cp -rpv /usr/local/pgsql/data/postgresql.conf /usr/local/pgsql/data/postgresql.conf_org

Örnek olacak kullanılacak test sisteminin donanım bilgileri;

OS : FreeBSD

CPU: Dual-Core AMD Opteron(tm) Processor 1210 (1809.29-MHz K8-class CPU)

real memory  = 4294967296 (4096 MB)

ad4: 238475MB <Seagate ST3250310AS 3.AAF> at ata2-master SATA150

1. shared_buffers miktarını arttırın;

shared buffer miktarı işlemdeki sorgu sonuçlarının tutulduğu hafıza miktarıdır. postgresql 8.4 te bu değer default olarak 28 MB olarak ayarlıdır. Genel kural olarak bu değerin sistem RAM miktarının %5 ile %15 i arasında olması uygundur. %15 üst limit yoğun database işlemleri yapan sistemler için uygundur. shared buffer miktarının aşırı derece arttırılması OS nin çalışmasını olumsuz etkileyebilmektedir.

Test sisteminin RAM miktarının 4GB ve shared buffers miktarının %15 olduğunu düşünürsek atanacak max değer 614 MB olmalıdır.

Eğer belirleyeceğimiz shared buffer miktarı işletim sisteminin çekirdeğinin shared memory miktarının üzerine çıkarsa şu tip bir hatayla karşılaşabilirsiniz;

FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=5432001, size=660709376, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.
You can either reduce the request size or reconfigure the kernel with larger SHMMAX.
To reduce the request size (currently 660709376 bytes), reduce PostgreSQL's shared_buffers parameter (currently 78592) and/or its max_connections parameter (currently 43).
If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memory configuration.

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 postgresql başlarken problem yaşayabilir. En iyi performans için bu parametre ile oynamalı ve en iyi uygulama için 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). Ayrıntılı bilgi için burayı inceleyebilirsiniz.

kern.ipc.shmall (Paylaşılan bellek için kullanılabilir maksimum page sayısı) parametresini de aynı zamanda uygun bir şekilde ayarlamamız gerekecektir.Bunun için kullanacağımız eşitlik aşağıdadır;

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

Test sistemimizde işletim sistemi kern.ipc.shmmax ve kern.ipc.shmall değerleri default kurulumdan dolayı düşük miktadır. Bu değerleri arttıralım ve kern.ipc.shmmax değerini 2GB, kern.ipc.shmall değerini de hw.pagesize değerini sabit tutarak eşitliğ göre ayarlayalım;

# sysctl -w kern.ipc.shmmax=2147483648
kern.ipc.shmmax: 536870912 -> 2147483648
# sysctl -w kern.ipc.shmall=524288
kern.ipc.shmall: 131072 -> 524288

kernel değerlerini ayarladıktan sonra postgresql için atayacağımız shared buffer miktarının max. değerini 614 MB bulmamıza rağmen her ihtimale karşın 512 MB olarak atayalım.

# vi /usr/local/pgsql/data/postgresql.conf

değeri atayalım;

shared_buffers = 512MB

veritabanını restart edelim ve durumu gözleyelim. Eğer restart düzgün yapıldı ise değerimiz başarılı bir şekilde aktif olmuştur.

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

veritabanından ayarlarımızın doğruluğunu kontrol edelim;

# SHOW shared_buffers ;
 shared_buffers
----------------
 512MB
(1 row)

belirlediğimiz kernel değerlerinin açılışta aktif olmasını istiyorsak bu değerleri /etc/sysctl.conf dosyasına girmemiz gerekmektedir.

kern.ipc.shmmax=2147483648
kern.ipc.shmall=524288

2. effective_cache_size miktarını arttırın;

Bu değer postgresql sorgu optimizer ına ne kadarlık bir OS dosya sistemi cache nin elverişli olduğunu gösterir. Sadece postgresql in koştuğu sistemlerde bu değer genellikle fiziksel memory e yakın yapılmaktadır. Siz bu değer ile postgresql optimizer ına OS cache inde elverişli ne kadarlık bir boyut olduğunu söylemiş oluyorsunuz. Postgresql de bu miktara göre sorguları optimize etmekte daha rahat veya daha temkinli davranabilir.

Bu değeri total RAM in 1/2 si kadar ayarlamak gayet normal bir optimizasyondur. 3/4 ü kadar ayarlamak ise biraz daha agresif fakat hala uygun bir durumdur. En uygun değeri ayarlamak için OS nin sistem istatistiklerini kontrol edebilirsiniz. Unix benzeri sistemlerde free veya top komutu ile free-cached number değerini görebilirsiniz. Postgresql de bu değer default olarak 128 MB atanmıştır. Biz bu değeri de RAMimizin 1/2 si kadarına yani 2GB a çıkaralım. (bu değeri değiştirdikten sonra restart gerekli değildir. HUP ile aktive edebilirsiniz.);

# SHOW effective_cache_size ;
 effective_cache_size
----------------------
 128MB
(1 row)

postgresql.conf ayarı;

effective_cache_size = 2048MB

restarttan sonra;

# SHOW effective_cache_size ;
effective_cache_size
----------------------
 2GB
(1 row)

3. VACUUM işlemini sıklıkla yapın;

veritabanında sürekli silme veya update işlemleri yapıldığında dead tuple(ölü data setleri) lar oluşur. Bu tuple lar otomatik olarak silinmezler. Eğer bir tablodaki tuple lar silinmez ise postgresql bu tuple ları gereksiz bir şekilde okuyup işe yaramadığını anlaması gerekecek. Eğer veritabanında binlerce dead tuple varsa hem zaman kaybı olacak hem de performans olumsuz etkilenecektir. Bu nedenle postgreSQL de VACUUM işlemi 3 neden için yapılması gerekir;

  • update ve delete edilmiş satırlardaki dead tuple ları temizleyerek disk alanı kazanma. (windowstaki defrag işlemi gibi.)
  • PostgreSQL sorgu optimizer ın kullandığı istatistiklerin update edilmesi.
  • transaction ID wraparound problemine karşın eski verilerin kaybolmasından kurtulmak

VACUUM işlemi sırasında tablolara ALTER TABLE işlemi dışında SELECT, UPDATE, DELETE ve INSERT sorguları çekilip işlem yapılabilir. Ayrıca VACUUM işlemi yapılırken hatrı sayılır bir miktarda I/O trafiği oluşmaktadır. Bu yüzden diğer işlemlerin etkilenmemesi için VACUUM işleminin serverın I/O yükü bakımından yoğun olmadığı zamanları tercih ediniz.

Ayrıntılı bilgi için routine vacuuming sayfasını kontrol edebilirsiniz.

***autovacuum işlemi;

PostgreSQL de şiddetle yapılması tavsiye edilen bu özellik VACUUM işleminin otomatik olarak yapılmasını sağlar. Buna göre yoğun miktarda eklenmiş, update edilmiş veya silinmiş tuple lar kontrol edilir ve istatistikler sürekli güncellenir. autovacuum işlemi VACUUM ve ANALYZE işlemini beraber yapar. Default olarak postgreSQL de açıktır. Kapatsanız bile transaction ID wraparound problemine karşın gerektiğinde çalışır.

Biz kendi sistemimizde autovacuum özelliğini aktif edip aynı zamanda gece belirli bir saatte hem VACUUM hemde ANALYZE işleminin yapılması için bir script düzenleyeceğiz. Scriptimize ekleyeceğimiz satır yaklaşık şu şekilde olacaktır;

/usr/local/bin/vacuumdb -z -a -U database_user

4.ANALYZE işlemini sıklıkla yapın;

PostgreSQL in query optimizer ı cost-based yapıda olmasında dolayı istatistiklere göre işlem yapmaktadır. ANALYZE işlemi bu istatistiklerin güncellenmesini sağlar ve optimizerin işini kolaylaştırır. ANALYZE işlemi sonrasında pg_statistic tablosu güncellenir. Bu nedenle düzenli periyotlarla ANALYZE işleminin yapılması performans için uygun bir yöntemdir.

5. VACUUM FULL komutunu çok sık çalıştırmayın;

  • VACUUM FULL işlemi VACUUM a göre daha çok disk alanı kazandırır. Fakat VACUUM a göre daha yavaş çalışır.
  • VACUUM FULL çalışırken tabloları kilitler ve bu tablolara ulaşılamaz.
  • VACUUM FULL tablo boyutunu düşürmesine rağmen index boyutunu aynı oranda düşüremez. Tam tersine index boyutunu yükseltir.

Bu sebeplerden dolayı sık çalıştırılması uygun değildir.

6. WAL dosyalarını fiziksel olarak ayrı diske taşıyın;

pg_xlog dizini sıklıkla update edilen dataların bulunduğu dizinidir. Bu dizinin ayrı fiziksel bir diske kopyalanması performansta %25 lere varan artış sağlar.

7. sort_mem değerini arttırın;

Eğer sorgularınızda birçok komplek sıralama işlemleri mevcut ise ve memory nizde yeterli seviyede ise sort_mem değerini arttırarak memory de sıralama işlemleri kapasitesini yükseltmiş olursunuz.

NOT: sort_mem parametresi postgreSQL 8.4 versiyonunda kaldırılmıştır.

8. random_page_cost değerini düşürün;

Eğer RAID konfigürasyonlu SCSI disklere sahipseniz bu değeri düşürerek query optimizerın rasgele index scan yapmasını sağlayabilir ve bu işlemi hızlandırabilirsiniz. Postgresql de default olarak değeri 4 atanmıştır. Hızlı disklere sahip iseniz bu değeri 2 ye düşürebilirsiniz.

9.max_fsm_pages ve max_fsm_relations değerlerini arttırın;

postgresql de sıklıkla yapılan update ve delete işlemleri sonucunda dead tuble ların oluştuğunu daha önce söylemiştik. Vacuum sayesinde bu tuble lar tekrar kullanılabilir hale gelmektedir. Free Space Map değeri doğrudan doğruya bu tubleların kayıt altına alınmasıyla alakalıdır. Vacuum işlemi sonucunda eğer bu boşluklar max_fsm_pages değerini aşıyorsa kalan dead tuble lar belirlenemez. Dolayısıyla da VACUUM işlemi tam başarımla yapılamaz. Bu yüzden max_fsm_pages değeri VACUUM ANALYZE VERBOSE komutu sonrasında gerekli olan max_fsm_pages sayısına göre ayarlanabilir. Sonuç olarak ta VACUUM veya VACUUM FULL komutuna olan gereksiniminiz azalmış olur.

NOT: PostgreSQL 8.4 te FSM komple tekrardan yazılmıştır. max_fsm_pages ve max_fsm_relations değerleri çıkarılmıştır. Artık yeni FSM kendi başına adapte olmaktadır. Ayrıntılı bilgi için burayı ziyaret edin.

10. wal_buffers değerini arttırın;

WAL(Write Ahead Log). Eğer veritabanınızda yazma işlemleri sıklıkla yapılıyorsa bu değeri arttırmanız boş disk alanının iyi kullanılması açısından yararınıza olacaktır. Benchmarking testleri bu değeri 1MB yapmanın ideal olduğunu göstermiştir.

Yukarıda anlatmış olduğumuz tuning ayarları iyileştirme sürecinin sadece küçük bir parçasıdır bunun yanında yapılabilecek optimizasyon aşamaları;

  • Memory Kullanımı İyileştirmesi
  • CPU Kullanımı İyileştirmesi
  • Disk Kullanımı İyileştirmesi
  • SQL sorguları İyileştirmesi
  • İndex Kullanım İyileştirmeleri
  • Network İyileştirmesi

Bu kategorilerideki konuları da vaktim olursa ilerleyen makalelerimde anlatmaya çalışacağım.

KAYNAKLAR:

http://linuxfinances.info/info/quickstart.html

http://wiki.postgresql.org/wiki/Performance_Optimization

http://www.varlena.com/GeneralBits/Tidbits/perf.html

http://www.enderunix.org/docs/postgresql/postgresql_tuning.pdf

http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)
  • Share/Bookmark
PDF    Makaleyi PDF formatında gönder

Etiketler: , , ,


Haz 27 2010

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

Category: FreeBSD,Genel,Gezegen,Linux,PostgreSQLBayram Karagöz @ 17:57

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/

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
PDF    Makaleyi PDF formatında gönder

Etiketler: , , , , ,


Eki 20 2009

3 Adımda FreeBSD Başlangıç Açılışında Script Çalıştırma

Category: FreeBSD,GezegenBayram Karagöz @ 12:59

Genellikle FreeBSD de bir programı kurduğunuzda kurulum tamamlandıktan sonraki uyarıda kurulan programın başlangıçta başlamasını istiyorsanız alttaki ifadeyi rc.conf a ekleyin der.  Arka tarafta da /usr/local/etc/rc.d/ altına bu programın başlangıç scriptini çalıştırma hakkı verilmiş bir şekilde tutar. Siz rc.conf ta gerekli eklemeyi yaptıktan sonra burada bulunan scripti çalıştırır. Mantık gayet güzel ve basit.

Bundan farklı olarak kendi yazdığımız scriptin nasıl çalıştırılacağını anlatalım. Yapacağımız işlemler yukarıda anlattığımız işlemin aslında aynısıdır. Tek fark scripti kendimiz yazacağız.

1- Scripti Yazalım

Açılışında başlamasını istediğimiz scripti root kullanıcısı olarak yazalım.

$ su -
# cd /usr/local/etc/rc.d/
# vi myscript.sh

scriptteki ifadeleri yerleştirelim;

#!/bin/sh
# This shell script is a test and will paste a "test.txt" file on my desktop
echo 'Test' > ~charles/Desktop/test.txt
chown charles:charles ~charles/Desktop/test.txt

2- Çalıştırma Hakkı

scripte çalıştırma hakkı verelim;

# chmod +x myscript.sh

3- Çalıştır şunu ey FreeBSD

FreeBSD ye açılışta bu scripti çalıştırmasını söyleyelim;

# vi /etc/rc.conf

aşağıdaki ifadeyi ekleyelim;

myscript_enable="YES"

kaydedip sisteme restart atalım. restart sonrasında masaüstünde test.txt dosyasını göreceksiniz.

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Create PDF    Makaleyi PDF formatında gönder

Etiketler: , , ,


Eki 04 2009

FreeBSD de Özel Kernel Oluşturma ve Derleme

Category: FreeBSDBayram Karagöz @ 10:33


1- Özet;

Kernel işletim sisteminin çekirdeğidir. Memory yönetimi, güvenlik kontrollerinin yapılması, network, disk erişimleri ve daha birçok işlemin yürütülmesini kontrol eder.

Bu dökümanı okuduktan sonra şu konularla alakalı bilgi sahibi olacağız;

  • Neden özel kernel derlemesi yapabiliriz?
  • Kernel konfigürasyon dosyası nasıl yeniden yazılır veya düzenlenir?
  • Kernel konfigürasyon dosyası yeni bir kernel oluşturmak için nasıl kullanılır?
  • Yeni kernel nasıl kurulur?
  • Problem oluştuğunda nasıl çözülür?

Bu dökümanda kullanılacak bütün komutlar root olarak çalıştırılması gerekmektedir.

2- Neden Özel Kernel Oluşturalım ki?

Genel olarak FreeBSD işletim sistemi monolithic adı verilen yekpare kernele sahiptir. Bu demektir ki kernel, uygun donanım aygıtlarının listelendiği büyük bir programdır ve kernelin çalışma şeklini değiştirmek istediğinde yeni bir kernel oluşturup, derleyip, restart ettiğimizde yeni kernelle çalışmaya başlayabiliriz.

Günümüzde kernelin gelişen yapısı sayesinde istediğimiz modülü aktif veya pasif ederek kernel oluşturabiliriz. Bu sayede kernel yeni çıkan aygıtlara hemen adapte olabilmektedir veya çalışmasını istemediğimiz bazı modülleri pasif ederek modüler bir kernel oluşturabiliriz.

Buna rağmen bazı kernel ayarlarını yeni kernel oluştururken aktarmamız gerekir. Bunun sebebi kimsenin kendine göre tam modüler bir kernel oluşturmak için yeni bir kernel yazmaya zamanının olmamasıdır.

Özel kernel oluşturulması ileri seviye FreeBSD kullanıcıları için çok önemlidir. bu süreç çok zaman almasına rağmen FreeBSD sistemiyle alakalı birçok bilgiye sahip olmanızı sağlar. GENERIC kernelden daha ziyade daha geniş çapta donanım aygıtını destekleyerek, sadece kendi PC mizin hardware ını destekleyebilir. Bu durumun birçok faydası vardır. Bunlar;

  • Pcnin hızlı boot edilmesini sağlar. Bu sayede pc hızlı açılıp kapanır.
  • Gereksiz uygulamalar ve modüller pasif edileceğinden daha düşük RAM kullanımını sağlar.
  • Daha geniş çapta donanım aygıtını tanıma desteği sağlar.

3- Sistem Donanım Belirleme

Kernel konfigürasyonuna başlamadan önce sistem donanımını bilmek faydalı olacaktır. Donanım hakkında bilgi sahibi olmak için dmesg(8) veya man(1) komutu kullanılabilir. Birçok desteklenen aygıt sürücülerinin yardım sayfası ve aygıt listeleri bulunabilir. Aşağıdaki örnekte psm sürücüsünde Mouse bulunmaktadır.

psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: [ITHREAD]
psm0: model Generic PS/2 mouse, device ID 0

Bu driver ın kernel konf dosyasında bulunması gerekir veya loader.conf(5) dosyası kullanılarak açılışta yüklenmesi gerekmektedir.

Ara sıra dmesg komutu system mesajlarını gösterir. Bu mesajlar kernel boot datası değildir. Dmesg bilgisi ayrıca /var/run/dmesg.boot dosyasından da takip edilebilir.

Aygıt bulmak için bir diğer yöntemde pciconf(8) ile daha detaylı bilgi görüntülemektir. Örneğin;


ath0@pci0:3:0:0: card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00
vendor = 'Atheros Communications Inc.'
device = 'AR5212 Atheros AR5212 802.11abg wireless'
class = network
subclass = ethernet

pciconf –lv komutu ath driverında bulunan wireless aygıtını gösterir.

man ath komutu ath(4) bu driver hakkında bilgi verir.

# man -k Atheros
ath(4) - Atheros IEEE 802.11 wireless network driver
ath_hal(4) - Atheros Hardware Access Layer (HAL)

4- Kernel Sürücüleri, Alt sistemleri ve Modülleri

Özel kernel hazırlamadan önce bu işi neden yapmamız gerektiğini bilmemiz gereklidir. Belki de tanıtmak istediğimiz donanım aygıtı varolan kernelde tanıtılmış olabilir.

Kernel modülleri /boot/kernel altında bulunmaktadır. Ayrıca dinamik olarak kldload(8) kullanılarak ta yüklenebilir.
Alternatively, to load the driver as a module at boot time, place the
following line in loader.conf(5):

if_ath_load="YES"

/boot/loader.conf dosyasına if_ath_load=”YES” parametresini ekleyerek te bu modülü açılışta aktif edebiliriz.

Warning: It is considerably easy to remove built in support for a device or option and have a broken kernel. For example, if the ata(4) driver is pulled from the kernel configuration file, a system using ATA disk drivers may not boot without the line added to loader.conf. When in doubt, check for the module and then just leave support in the kernel.

5- Yeni Kernel Oluşturma ve Kurma

Hızlı bir şekilde kernel oluşturma klasörünü inceleyelim. Kernelle alakalı tüm dosyalar /usr/src/sys altında bulunmaktadır. Direk olarak /sys ile de ulaşılabilecek bu klasör altında bizim için en önemli olan kısım arch/conf klasörünün içeriğidir. Kernel ayarlarının yapılacağı dosyalar burada bulunmaktadır. Arch ifadesi i386, alpha, amd64, ia64, powerpc, sparc64, or pc98 den sistemimizin desteklediğini gösterir.

Bu bölümde mimari olarak i386 kullanıldığı varsayılacaktır.

NOT: eğer /usr/src/sys diye bir klasör yok ise kernel kaynak kodları yüklenmemiştir. Kodları yüklemenin en iyi yolu root olarak sysinstall u çalıştırıp Configure > Distributions dan src, base ve sys yi seçip kurmaktır. Eğer cd varsa komut satırından aşağıdaki şekilde kurulum yapılabilir.


# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
# cat /cdrom/src/sbase.[a-d]* | tar -xzvf –

Daha sonra arch


# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL

Genellikle yazılacak kernel adının tüm harfleri büyük yazılmalıdır. Eğer birçok freebsd kontrol ediyorsanız kernel adını hostname yapmanız daha uygun olacaktır. Biz örneğimizde adı MYKERNEL olarak belirledik.

Konf dosyanızı başka biryerde saklayıp link vererek çalıştırabilirsiniz.

# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

Artık kendi kernel konf dosyanızı vi editörü ile açarak istediğiniz biçimde konfigüre edebilirsiniz.

Note: If you sync your source tree with the latest sources of the FreeBSD project, be sure to always check the file /usr/src/UPDATING before you perform any update steps. This file describes any important issues or areas requiring special attention within the updated source code. /usr/src/UPDATING always matches your version of the FreeBSD source, and is therefore more up to date with new information than this handbook.

İsteğimiz ayarları yaptıktan sonra kaynak kodu derlemeye geldi sıra.

Kerneli oluşturma

1- /usr/src klasörüne gelin.

# cd /usr/src

2- Kerneli derleyin.

# make buildkernel KERNCONF=MYKERNEL

3- Kerneli yükleyin.

# make installkernel KERNCONF=MYKERNEL

İpucu: default olarak özel kernel oluşturduğunuzda, tüm kernel modülleri tekrardan oluşturulur. Kerneli daha hızlı güncellemek istiyorsanız veya sadece bazı modülleri yüklemek istiyorsanız, kerneli inşa etmeye başlamadan önce /etc/make.conf dosyasını editlememiz gerekir.
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
Yukarıdaki parametre sadece seçilen le ilgili tüm modülleri listeler.
WITHOUT_MODULES = linux acpi sound/sound sound/driver/ds1 ntfs
Yukarıdaki parametre seçilenin dışındaki tüm modülleri listeler.
Diğer bilgiler için make.conf(5) incelenebilir.
Yeni kernel /boot/kernel altında /boot/kernel/kernel olarak oluşturulur ve eski kernel dosyaları /boot/kernel.old/kernel altına kopyalanır. Artık sisteme restart atıp yeni kerneli kullanmaya başlayabilirsiniz.

6- Kernel konfigürasyon dosyası

Konfigürasyon dosyasının içeriği oldukça basittir. Her satırda bir adet anahtar kelime ve bir veya daha fazla argüman vardır. Basitlik olması açısından çoğu satırda tek argüman vardır. # ile başlayan satırlar açıklama satırı olup ihmal edilir. Takip eden bölümde GENERIC dosyasındaki her anahtar kelime açıklanacaktır. Daha detaylı ve işlemci mimarisi fark etmeksizin tüm durumlar ve aygıtlar için GENERIC ile aynı klasörde bulunan NOTES dosyasını inceleyebilirsiniz. Tam yolu /usr/src/sys/conf/NOTES altındadır. FreeBSD 5.0 dan sonra konfigürasyon dosyasında başka bir konfigürasyon dosyasını dahil eden include yönergesi getirilmiştir. Örneğin GENERIC konf dosyasını kullanarak sadece birkaç seçenek ve sürücü eklemek istiyorsak aşağıdaki şekilde ifadeleri yerleştirebiliriz.


include GENERIC
ident MYKERNEL
options IPFIREWALL
options DUMMYNET
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT

NOT: test amacıyla bütün seçeneklerin bulunduğu bir dosya oluşturmak amacıyla aşağıdaki komutu root olarak çalıştırın.

# cd /usr/src/sys/i386/conf && make LINT
machine i386

sistem mimarisini belirtmektedir. Duruma göre alpha, amd64, i386, ia64, pc98, powerpc, veya sparc64 de olabilir.

cpu I486_CPU
cpu I586_CPU
cpu I686_CPU

kullanılan CPU tipini belirtir. Cpu tipinden emin değilseniz yukarıdaki örnekteki gibi birden fazla tip girebilirsiniz ama en uygun yöntem dmesg ile CPU tipini belirleyip sadece ilgili tipi girmektir.

ident GENERIC

kernelin kimliklendirme kısmıdır. Kernelinizin isminin girileceği kısımdır.

#To statically compile in device wiring instead of /boot/device.hints
#hints "GENERIC.hints" # Default places to look for devices.

device.hints(5) aygıt sürücüleri için seçeneklerin ayarlanmasını sağlar. loader(8) default olarak yerinin bulunduğu /boot/device.hints dosyasının kontrol eder. hints parametresi ile bu dosya static olarak belirlenebilir.
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols

kernel oluşturulurken –g parametresi ile debugging açılır.

options SCHED_ULE # ULE scheduler

default sistem scheduler ı. Değiştirmeyin.

options PREEMPTION # Enable kernel thread preemption

kernel süreçlerinden öncelikleri yüksek olanları çalıştırma.

options INET # InterNETworking

network desteği aktif etme. Bazı uygulamalar loop olarak çalıştığı için network gerekmeyebilir. İptal edebilirsiniz.

options INET6 # IPv6 communications protocols

IPv6 haberleşme protokolü desteği

options FFS # Berkeley Fast Filesystem

basit harddisk dosya sisteminin aktivasyonudur. Diskten boot edecekseniz kullanmalısınız.

options SOFTUPDATES # Enable FFS Soft Updates support

kernele yapılacak Soft Update leri aktif eder. bu işlem diske yazma işlemlerinin hızlanmasını sağlayabilir.

options UFS_ACL # Support for access control lists

kernelin giriş kontrol listesi ( ACL ) desteklemesini sağlar. Default olarak enable edilmiştir.

options UFS_DIRHASH # Improve performance on big directories

büyük dosyalarda işlem yapılması durumunda veya yüksek memory kullanılması durumlarında aktif edilmesi gerekir. Aksi durumda pasif edilebilir.

options MD_ROOT # MD is a potential root device

memory bazlı sanal disklerin root aygıtı olarak kullanılmasını sağlar.

options CD9660 # ISO 9660 Filesystem

CDROM dosya sistemini aktif eder. eğer CDROM yoksa pasif edilebilir.

options PROCFS # Process filesystem (requires PSEUDOFS)

süreç dosya sistemi aktif etme. Süreçler hakkında bilgi veren ps komutunun çalışması için gereklidir. Fakat ps den başka süreç takibi için birçok araç olduğunu düşünürsek pasif edilebilir.

options PSEUDOFS # Pseudo-filesystem framework

6.X kernellerinde PROCFS aktif edilmişse aynı zamanda PSEUDOFS aktif edilmelidir.

options GEOM_GPT # GUID Partition Tables.

Tek disk üzerinde birden çok geniş partition oluşturulabilmesini sağlar.

options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!]

4.3BSD ile uyumluluk için girilir. Bazı programların çalışması için gereklidir.

options COMPAT_FREEBSD4 # Compatible with FreeBSD4

5.X versiyonundan sonrakilerde bulunan eski versiyonların desteklenmesi.

options COMPAT_FREEBSD5 # Compatible with FreeBSD5

6.X versiyonundan sonrakilerde bulunan ve eski versiyonun desteklenmesini sağlar.

options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI

her SCSI diskinin sisteme bağlanmadan önce 5 sn beklemesini sağlar. Eğer IDE disk kullanıyorsanız pasif edebilirsiniz. SCSI kullanıyorsanız boot un hızlı yapılabilmesi için süreyi azaltabilirsiniz fakat problem olabilir.

options KTRACE # ktrace(1) support

kernel debugging için ktrace komutunu aktif eder.

options SYSVSHM # SYSV-style shared memory

System V shared memory ayarıdır.

options SYSVMSG # SYSV-style message queues

System V mesajlarını aktif eder. kernele sadece birkaç yüz byte yük getirir.

options SYSVSEM # SYSV-style semaphores

System V semaphores desteğidir. Nadir kullanılır fakat kernele sadece birkaç yüz byte yük getirir.

options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions

POSIX eklenen gerçek zamanlı işlemler için kullanılır.

options KBD_INSTALL_CDEV # install a CDEV entry in /dev

/dev altındaki klavye aygıtlarının tanınması için gereklidir.

options ADAPTIVE_GIANT # Giant mutex is adaptive.

Ne işe yaradığını bilmiyorsanız aktif edin.

device apic # I/O APIC

I/O APIC kesme işlemlerinin aktif olmasını sağlar. SMP kerneli için gereklidir. Çoklu işlemci desteği için SMP nin de kernelde aktif edilmesi gerekir.

device eisa

EISA anakartınız varsa EISA bus taki tum donanımların otomatik bulunmasını ve desteklenmesini sağlar.

device pci

PCI anakartlarda aktif edilmelidir.

# Floppy drives
device fdc

disket sürücü için

# ATA and ATAPI devices
device ata

ATA ve ATAPI aygıtlarının desteklenmesi için

device atadisk # ATA disk drives

ATA disk sürücüleri için gereklidir.

device ataraid # ATA RAID drives

ATA RAID sürücüleri için gereklidir.

device atapicd # ATAPI CDROM drives

ATAPI CDROM sürücüleri için gereklidir.

device atapifd # ATAPI floppy drives

ATAPI disket sürücüleri için gereklidir.

device atapist # ATAPI tape drives

ATAPI teyp sürücüleri için.

options ATA_STATIC_ID # Static device numbering

aygıt numaraları dinamik olarak oluşturma

# SCSI Controllers
device ahb # EISA AHA1742 family
device ahc # AHA2940 and onboard AIC7xxx devices
options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~128k to driver.
device ahd # AHA39320/29320 and onboard AIC79xx devices
options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.
device amd # AMD 53C974 (Teckram DC-390(T))
device isp # Qlogic family
#device ispfw # Firmware for QLogic HBAs- normally a module
device mpt # LSI-Logic MPT-Fusion
#device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (newer chipsets + those of `ncr')
device trm # Tekram DC395U/UW/F DC315U adapters
device adv # Advansys SCSI adapters
device adw # Advansys wide SCSI adapters
device aha # Adaptec 154x SCSI adapters
device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device bt # Buslogic/Mylex MultiMaster SCSI adapters
device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50

SCSI kontrol aygıtları. Sisteminizde bulunmayan aygıtları silebilirsiniz. Eğer sadece IDE varsa hepsini silebilirsiniz. *_REG_PRETTY_PRINT bulunan satırlar debugging içindir.

# SCSI peripherals
device scbus # SCSI bus (required for SCSI)
device ch # SCSI media changers
device da # Direct Access (disks)
device sa # Sequential Access (tape etc)
device cd # CD
device pass # Passthrough device (direct SCSI access)
device ses # SCSI Environmental Services (and SAF-TE)

SCSI çevresel aygıtları. İstediklerinizi aktif edebilirsiniz.
NOT: Bazı USB sürücüleri SCSI altsistemi olmamalarına rağmen SCSI imiş gibi davranırlar. Bu duruma dikkat ediniz.

# RAID controllers interfaced to the SCSI subsystem
device amr # AMI MegaRAID
device arcmsr # Areca SATA II RAID
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device ciss # Compaq Smart RAID 5*
device dpt # DPT Smartcache III, IV - See NOTES for options
device hptmv # Highpoint RocketRAID 182x
device rr232x # Highpoint RocketRAID 232x
device iir # Intel Integrated RAID
device ips # IBM (Adaptec) ServeRAID
device mly # Mylex AcceleRAID/eXtremeRAID
device twa # 3ware 9000 series PATA/SATA RAID
# RAID controllers
device aac # Adaptec FSA RAID
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device mfi # LSI MegaRAID SAS
device mlx # Mylex DAC960 family
device pst # Promise Supertrak SX6000
device twe # 3ware ATA RAID

desteklenen RAID kontroller kartları. Herhangi birisi mevcut değilse açıklama satırı haline getirebilirsiniz.

# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc # AT keyboard controller

klavye kontrollerı (atkbdc) ve PS/2 mouse kontrolleri (psm) destekleme

device atkbd # AT keyboard

atkbd sürücüsü desteği AT klavyeleri ile birlikte

device psm # PS/2 mouse

eğer Mouse nuzu PS/2 ile bağladıysanız bu kısmı etkinleştirmelisiniz.

device kbdmux # keyboard multiplexer

çoklu klavye desteği. Makinenizde birden çok klavye kullanmayacaksanız pasif edebilirsiniz.

device vga # VGA video card driver

ekran kartı sürücüsü

device splash # Splash screen and screen saver support

boot ekranı ve ekran koruyucu desteği

# syscons is the default console driver, resembling an SCO console
device sc

sc default konsol sürücüsüdür ve SCO konsoluna benzer.

# Enable this for the pcvt (VT220 compatible) console driver
#device vt
#options XSERVER # support for X server on a vt console
#options FAT_CURSOR # start with block cursor

VT220 konsol desteğinin aktif edilmesi

device agp

sistemde AGP kartı varsa aktif edin.

# Power management support (see NOTES for more options)
#device apm

Gelişmiş Güç Yönetimi nin aktif edilmesi. Laptoplar için kullanışlıdır. GENERIC te default olarak pasif tir.

# Add suspend/resume support for the i8254.
device pmtimer

APM ve ACPI gibi güç yönetimi olayları için zamanlayıcı aygıt sürücüleridir.

# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device cbb # cardbus (yenta) bridge
device pccard # PC Card (16-bit) bus
device cardbus # CardBus (32-bit) bus

PCMCIA desteği. Laptop kullanıyorsanız aktif etmek isteyebilirsiniz.

# Serial (COM) ports
device sio # 8250, 16[45]50 based serial ports

COM portlarına yönelik seri portların aktif edilmesi

# Parallel port
device ppc
ISA-bus paralel port interface i
device ppbus # Parallel port bus (required)

paralel port bus desteği

device lpt # Printer

paralel port printer desteği
NOT: üstteki son 3 satır paralel port printer için gereklidir.

device plip # TCP/IP over parallel

paralel network interface desteği

device ppi # Parallel port interface device

I/O (“geek port”) + IEEE1284 I/O

#device vpo # Requires scbus and da

Iomega Zip sürücüsü. scbus ve da desteğini içerir.

#device puc

Eğer puc(4) tarafından desteklenen “dumb” seri kartı veya paralel PCI kartı varsa aktif edin.

# PCI Ethernet NICs.
device de # DEC/Intel DC21x4x (“Tulip”)
device em # Intel PRO/1000 adapter Gigabit Ethernet Card
device ixgb # Intel PRO/10GbE Ethernet Card
device txp # 3Com 3cR990 (“Typhoon”)
device vx # 3Com 3c590, 3c595 (“Vortex”)

PCI network kartları desteği. Sistemizin desteklemediği kartları uncomment edebilirsiniz.

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the ‘device miibus’ line in order to use these NICs!
device miibus # MII bus support
Bazı PCI 10/100 Ethernet NIC leri için MII bus desteği için yazılır.
device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet
device bfe # Broadcom BCM440x 10/100 Ethernet
device bge # Broadcom BCM570xx Gigabit Ethernet
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device lge # Level 1 LXT1001 gigabit ethernet
device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet
device nge # NatSemi DP83820 gigabit ethernet
device nve # nVidia nForce MCP on-board Ethernet Networking
device pcn # AMD Am79C97x PCI 10/100 (precedence over 'lnc')
device re # RealTek 8139C+/8169/8169S/8110S
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (“Starfire”)
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet
device ste # Sundance ST201 (D-Link DFE-550TX)
device stge # Sundance/Tamarack TC9021 gigabit Ethernet
device ti # Alteon Networks Tigon I/II gigabit Ethernet
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 “EPIC”)
device vge # VIA VT612x gigabit ethernet
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (“Boomerang”, “Cyclone”)

MII bus kontroller kodu kullanan Ethernet sürücüleri

# ISA Ethernet NICs. pccard NICs included.
device cs # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device ex # Intel EtherExpress Pro/10 and Pro/10+
device ep # Etherlink III based cards
device fe # Fujitsu MB8696x based cards
device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device lnc # NE2100, NE32-VL Lance Ethernet cards
device sn # SMC's 9000 series of Ethernet chips
device xe # Xircom pccard Ethernet
# ISA devices that use the old ISA shims
#device le

ISA Ethernet sürücüleri. Hangi kartın hangi sürücüyü desteklediğini incelemek için /usr/src/sys/i386/conf/NOTES dosyasını inceleyebilirsiniz.

# Wireless NIC cards
device wlan # 802.11 support

genel 802.11 desteği. Wireless network için gereklidir.

device wlan_wep # 802.11 WEP support
device wlan_ccmp # 802.11 CCMP support
device wlan_tkip # 802.11 TKIP support

802.11 aygıtları için şifreleme desteği

device an # Aironet 4500/4800 802.11 wireless NICs.
device ath # Atheros pci/cardbus NIC's
device ath_hal # Atheros HAL (Hardware Access Layer)
device ath_rate_sample # SampleRate tx rate control for ath
device awi # BayStack 660 and others
device ral # Ralink Technology RT2500 wireless NICs.
device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device wl # Older non 802.11 Wavelan wireless NIC.

Çeşitli wireless kartları desteği

# Pseudo devices
device loop # Network loopback

TCP/IP için genel loopback aygıtı. Eğer localhosta telnet veya ftp ile bağlanmak gerekiyorsa bu sürücü üzerinden işlem yapılır. Aktif edilmesi gerekir.

device random # Entropy device

şifeleme tekniği ile rasgele numara oluşturma

device ether # Ethernet support

sadece Ethernet kartı olduğu zaman ether e ihtiyaç duyulur.

device sl # Kernel SLIP

sl SLIP desteği içindir. PPP nin yerini almıştır. Modemden modeme bağlantı için daha iyi ve daha güçlü bir yoldur.

device ppp # Kernel PPP

dial-up bağlantı için PPP desteği

device tun # Packet tunnel.

PPP yazılım tarafından kullanılır.

device pty # Pseudo-ttys (telnet etc)

“pseudo-terminal” login portudur. Gelen telnet , rlogin session ları, xterm ve Emacs tarafından kullanılır.

device md # Memory “disks”

memory disk pseudo-aygıtları

device gif # IPv6 and IPv4 tunneling

IPv6 ile IPv4 arasındaki tunnelleme için kullanılır.

device faith # IPv6-to-IPv4 relaying (translation)

pseudo-aygıtlarının kendi üzerine gelen paketleri yakalaması ve IPv6/IPv4 dönüşüm deamon nuna gönderilmesini sağlar.

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device bpf # Berkeley packet filter

Berkeley Paket Filtreleme nin aktif edilmesidir. Bu sayede tcmpdump ile paketler snif edilebilir.

NOT: bpf(4) aygıtları aynı zamanda dhclient(8) aracılığıyla otomatik IP adresi almak için kullanılacağından aktif edilmesi gerekir.

# USB support
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device ehci # EHCI PCI->USB interface (USB 2.0)
device usb # USB Bus (required)
#device udbp # USB Double Bulk Pipe devices
device ugen # Generic
device uhid # “Human Interface Devices”
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device ural # Ralink Technology RT2500USB wireless NICs
device urio # Diamond Rio 500 MP3 player
device uscanner # Scanners
# USB Ethernet, requires mii
device aue # ADMtek USB Ethernet
device axe # ASIX Electronics USB Ethernet
device cdce # Generic USB over Ethernet
device cue # CATC USB Ethernet
device kue # Kawasaki LSI USB Ethernet
device rue # RealTek RTL8150 USB Ethernet

çeşitli USB aygıtlarının desteği

# FireWire support
device firewire # FireWire bus code
device sbp # SCSI over FireWire (Requires scbus and da)
device fwe # Ethernet over FireWire (non-standard!)

çeşitli firewire aygıtlarının desteği

Daha fazla ve detaylı olarak FreeBSD nin desteklediği aygıtları incelemek için /usr/src/sys/i386/conf/NOTES dosyasını inceleyebilirsiniz.

Daha fazla memory kullanılabilmesi için yapılacak konfigürasyon (PAE)

32 bitlik sistemlerde 4 gigabyte tan yüksek memory miktarını destekleyebilmek için FreeBSD de basit bir kernel ayarlaması yapabilirsiniz.
options PAE

NOT: PAE sadece Intel IA-32 işlemcileri için geçerlidir. Bu özellik FreeBSD de çok fazla test edilmediği için beta kalitesindedir.

7- Birşeyler yanlış giderse!!

Özel kernel oluştururken karşılaşılabilecek problemleri 4 kategoride toplarsak;

config komutu başarısız olursa;

kernelin oluşturulması için gerekli tanımlamaları girdikten sonra config(8) ile çalıştırırdıktan sonra oluşabilecek herhangi bir hata aşağıdaki gibi hatanın oluştuğu satırla birlikte verilir.
config: line 17: syntax error
make komutu başarısız olursa;

make komutu sonrasında hata ile karşılaşırsanız config dosyanızı kontrol ediniz. Eğer herhangi bir sonuca varamazsanız FreeBSD general questions mailing list e mail atıp durumu bildiriniz.

Yeni kernel boot sonrasında açılmazsa;

Yeni kernel derlemesi sonrasında boot aşamasında kernel açılmaz ise FreeBSD boot loader aşamasında boot menü görüldüğünde 6. Seçenekteki “Escape to a loader prompt” seçeneğini seçin.

Gelen kısımda unload kernel deyip boot /boot/kernel.old/kernel yazın. Böylece sisteminiz bir önceki kernelden tekrar açılacaktır.

Sonrasında hatanın sebebini /var/log/messages veya dmesg ile inceleyebilirsiniz.

NOT: yeni kernel derlenmesi sonrasında geriye dönmek için kernel.old a güvenemeyebilirsiniz. Çünkü konfigürasyon aşamasında yapılan değişiklikler kernel.old a da etki eder ve bozulmasına sebep olabilir. Çalışan kerneli /boot/kernel altına taşıyarak sorunuzu çözebilirsiniz. Bunu alttaki şekilde yapabilirsiniz.

# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.good /boot/kernel

Kernel çalışır fakat ps komutu çalışmazsa;

Eğer kernelin versiyonunu değiştirmişseniz örneğin –CURRENT dan –RELEASE e geçmişseniz bazı ps veya vmstat gibi sistem komutları çalışmayabilir.bu durumda recompile and install a world işlemini yapıp aynı kernel versiyonu ile kurulum yapmanız gerekir.

Kaynaklar: http://www.freebsd.org/doc/en/books/handbook/kernelconfig.html

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Create PDF    Makaleyi PDF formatında gönder

Etiketler: ,