Yüksek Cpu load elinizi kolunuzu bağlayan durumlardan biridir herhangi bi proje geliştirdiğinizde veya yüksek hitli bir site sahibi iseniz.

Başınıza bir ton masraf çıkarır ve kazandığınızı sunucu kiralarına öder duruma gelirsiniz.Peki bu illete yakalanmamak için neler yapılmalıdır?

Halihazırda yakalanmışsanız nasıl bir yol izlemeniz gerekmektedir? Bir sunucunun Cpu load oranını neler etkiler?

Bu yazıyı yazmadan önce yaklaşık 2-3 aydır bu load sıkıntısı ile ugraştım bir sistemde ve cpu load yapmayan bir script yazdim scripti şuan sorunsuz şekilde çok yüksek hitli sitelerimizde kullanıyoruz öyleki durum şuan 1000 online kullanici cpu load % 0.80 peki bu durumu sağlarken nelerden yardım aldık nelere dikkat ettik.

Öncelikle cpu değerinizi etkileyen birçok faktör var bunlardan en önemlileri;

Makina Optimizeniz: webserver olarak apache kullanıyorsanız ve load degerleriniz yüksek ise litespeed nginx gibi apache ye yardimci moduller kurabilirsiniz nginx ücretsiz litespeed ise çeşitli versiyonlarının çeşitli ücretleri var.

sunucunuzun optimizesinde dikkat etmeniz ikinci bir durum ise harddiskleriniz.Çok fazla yazıp silme işlemi yapan bir sistem ile çalışıyorsanız misal klasor cache sistemi kullanan bir sistem veya üyelerinin resimlerini videolarini sunucuda tuttuğu bir sistem kesinlikle sata disk kullanmayınız backup işlemi sırasında bizimde başımıza geldiği gibi güm diyebilir Sata harddisk yerine SCSI(Small Computer System Interface) harddiskleri tercih etmelisiniz.

Çok Çok Fazla mysql verisine sahipseniz ve bu milyonları buluyorsa anlık olarakda birçok sorgu gönderiliyorsa mysql e sunucu tarafında yapılması gereken bir diğer optimize de mysql inizi ramdisk de çalıştırmak.Ramdiskler piyasadaki en hızlı diskler olmasina karşın çok da pahalıdır fakat performans farkı ücretini unutturcak kapasitede olacaktir.

Mysql Optimize: Evettt en can alıcı noktalardan biri bu mysql optimizesi güzel şekilde yapılmazsa sorgular optimizeli şekilde kullanılmazsa tablolar scriptinizle uyumlu halde olmazsa ne yukarda bahsettiğimiz sunucu optimizesi ne de aşşağıda bahsedeceğimiz kodlama optimizesi sizi yüksek cpu load dan büyük oranda kurtaramayacaktir.

Mysql optimizenizi şu şekilde yapmaniz gerekmekte veri tiplerine dikkat etmelisiniz sadece rakam lazım olcaksa size rakam tanımlamalı 255 karakter den azı yetiyorsa size text yerine varchar kullanilmali hatta 255 den daha az ı yeterli ise daha azı kullanilmali.Üzerinden sorgu yapacağınız alanlar index tanımlanmalı.Mümkün olduğunca veriler kategorize edilerek tablo tasarimlari yapılmalı.Misal scriptinizde ad ile yaş ı bir sayfada kullanıyorsaniz ad ve yaz aynı tabloda olmali, kişinin yaşı için 2. bi tablodan veri çekmenizi gerektircek bi yapı olmamalı.

Php Kodlama Optimize:En Basitinden bir örnek ile size bu olayı açıklayayım mysql i en çok yoran sorgulardan biri random veri çekmek istedigimiz ve rand() kullandığımız sorgulardır. Php ile rand yapabiliyorsak php bize kasmadan bunu yapabilme imkanı sağlıyorsa büyük bi mysql den rand ile veri çekmenin mantığı nedir ? hiçbir mantığı yok.php kodlama optimize kısmında özellikle üstünde durmak istediğim nokta bu php ile yapabileceklerinizi php ile yapmalısınız mysql e yük etmemelisiniz.Çok zaman alan işlemleri bölerek yapmalısınız.Eğer mysql den veri çekiyorsaniz mysql komutlarını istediğiniz verinin tam karşılığını verecek şekilde ayarlamalısınız.Misal mysql boyutunuz yüksek birçok etiketiniz var ve yeni bir etiket kaydederken var olup olmadiginin kontrolunu yapıyorsunuz.Mantık şu şekilde geliştirilmeli varsa o etiketten 1 tane vardır fazlası yoktur oyuzden benim sorgum 1 tane bulunca sona ermeli demekki limit 1 kullanmam gerekiyor.

Kaynak : http://www.codedbygod.com/php/yuksek-cpu-load-script-optimize/