WordPress CPU Kullanımı Masterclass: Sunucunuzun Nefesini Kesen Sorunlara Derinlemesine Bakış ve Kanıtlanmış Çözüm Yöntemleri

- WordPress CPU Kullanımı Masterclass: Sunucunuzun Nefesini Kesen Sorunlara Derinlemesine Bakış ve Kanıtlanmış Çözüm Yöntemleri
- Bölüm 1: Sorunun Kök Nedenleri (Teknik Analiz)
- 1. Verimsiz Veritabanı Sorguları: CPU'nun En Büyük Düşmanı
- 2. WordPress Heartbeat API: Sessiz CPU Tüketicisi
- 3. WP-Cron: Ziyaretçi Tetiklemeli Zaman Bombası
- 4. Şişirilmiş wp_options Tablosu ve "Autoloaded Data"
- Bölüm 2: Kapsamlı ve Uygulamalı Çözüm Stratejileri
- 1. Önbellekleme (Caching) Masterclass: Sadece Kurmak Yetmez
- 2. Gerçek Cron Job Kurulumu (Adım Adım)
- 3. Heartbeat API'yi Kontrol Altına Almak
- 4. Gelişmiş Veritabanı Optimizasyonu
- 5. Hosting ve Altyapısal İyileştirmeler
- Sonuç ve Eylem Planı
Bu rehber, sitenizin neden yavaşladığını sadece anlamanızı değil, aynı zamanda bilinçli ve kalıcı çözümler uygulamanızı sağlayacak teknik bilgileri de içermektedir.
Bölüm 1: Sorunun Kök Nedenleri (Teknik Analiz)
Yüksek CPU kullanımının ardındaki mekanizmaları daha detaylı inceleyelim.
1. Verimsiz Veritabanı Sorguları: CPU’nun En Büyük Düşmanı
Detay: Bir WordPress sayfası yüklendiğinde, arka planda onlarca SQL sorgusu çalışır. Bu sorgular, yazıları, yorumları, ayarları, eklenti verilerini veritabanından çeker. Sorun, bu sorguların “verimsiz” olmasıyla başlar.
- Döngü İçindeki Sorgular (Queries in Loops): Bir eklenti veya tema, sayfanızdaki her bir yazı için ayrı ayrı veritabanına sorgu gönderiyorsa (örneğin, her yazı için özel bir meta bilgisi çekmek), bu durum CPU üzerinde katlanarak artan bir yük yaratır. 20 yazının olduğu bir sayfada bu, 1 yerine 20+ sorgu anlamına gelebilir.
- JOIN ve Karmaşık Sorgular: Özellikle “İlişkili Yazılar” (Related Posts) gibi özellikler sunan eklentiler, birden fazla tabloyu birleştiren (JOIN) ve metin analizi yapan karmaşık sorgular kullanır. Bu sorgular, basit bir veri çekme işlemine göre CPU’yu çok daha fazla meşgul eder.
- Optimize Edilmemiş Meta Sorguları:
wp_postmeta
vewp_usermeta
tablolarında arama yapmak, doğru “indekslenmemişse” son derece yavaş olabilir. WordPress bu konuda esnektir ancak bu esneklik, kötü kodlanmış bir eklentinin tüm veritabanını taramasına neden olabilir.
Doğrulama: Bu durumu teşhis etmek için Query Monitor eklentisi en iyi araçtır. Sitenizin her sayfasında çalışan tüm SQL sorgularını, ne kadar sürdüklerini ve hangi eklenti/tema tarafından tetiklendiklerini size gösterir. Eğer bir eklentinin 0.5 saniyeden uzun süren sorgular yaptığını görürseniz, suçluyu buldunuz demektir.
2. WordPress Heartbeat API: Sessiz CPU Tüketicisi
Detay: WordPress yönetici paneline girdiğinizde, tarayıcınız ile sunucunuz arasında düzenli bir iletişim kurulur. Bu iletişim, “Heartbeat API” aracılığıyla gerçekleşir. Her 15-60 saniyede bir, sunucuya küçük AJAX istekleri gönderilir. Bu ne işe yarar?
- Yazı yazarken otomatik taslak kaydı yapar.
- Başka bir yazarın aynı yazıyı düzenleyip düzenlemediğini kontrol eder.
- Panodaki eklenti bildirimlerini günceller.
Sorun: Yönetici panelinde birden fazla sekme açık olduğunda veya birden fazla editör aynı anda çalıştığında, bu küçük istekler birleşerek sunucuya sürekli bir “ping” seli gönderir. Her ping, admin-ajax.php
dosyasını çalıştırır ve bu da bir PHP sürecini tetikleyerek CPU kullanır. Bu durum, “admin-ajax.php yüksek CPU kullanımı” sorununun temel nedenidir.
Doğrulama: Hosting firmanızın kaynak kullanım raporlarında admin-ajax.php
dosyasının sürekli en üst sıralarda olduğunu görüyorsanız, Heartbeat API’nin kontrolsüz çalıştığına emin olabilirsiniz.
3. WP-Cron: Ziyaretçi Tetiklemeli Zaman Bombası
Detay: WP-Cron, gerçek bir “cron job” (sunucunun belirli zamanlarda otomatik çalıştırdığı görev) değildir. Bu bir “pseudo-cron” yani sahte cron’dur. Çalışması için sitenize bir ziyaretçinin gelmesi gerekir. Ziyaretçi geldiğinde WP-Cron tetiklenir ve “Zamanı gelmiş bir görev var mı?” diye kontrol eder.
Sorun: Yüksek trafikli bir sitede, saniyede onlarca ziyaretçi gelebilir. Bu, WP-Cron’un saniyede onlarca kez tetiklenmesi demektir. Eğer zamanlanmış ağır bir görev varsa (örneğin, büyük bir yedekleme eklentisinin veritabanını taraması), birden fazla süreç aynı anda bu görevi çalıştırmaya çalışabilir. Bu “yarış durumu” (race condition), CPU’yu anında %100’e kilitleyebilir.
Doğrulama: Sunucu erişim loglarınızı (access.log
) incelediğinizde, wp-cron.php
dosyasına yapılan isteklerin (POST requests) çok sık olduğunu görürseniz, bu durumun sitenizi olumsuz etkilediği doğrulanmış olur.
4. Şişirilmiş wp_options
Tablosu ve “Autoloaded Data”
Detay: WordPress’teki wp_options
tablosu, sitenizin tüm ayarlarını, eklenti konfigürasyonlarını ve geçici verileri (transients) tutar. Bu tablodaki bazı veriler “autoload” (otomatik yükleme) olarak işaretlenir. Bu, WordPress’in her sayfa yüklemesinde bu verileri otomatik olarak belleğe yüklemesi anlamına gelir.
Sorun: Kullandığınız ve daha sonra sildiğiniz eklentiler, geride yüzlerce gereksiz satır bırakabilir. Zamanla, otomatik yüklenen veri miktarı 1 MB’ı aşıp 5-10 MB’lara çıkabilir. Her bir ziyaretçi için bu kadar büyük verinin sürekli belleğe yüklenmesi, hem bellek (RAM) hem de CPU kullanımını artırır.
Doğrulama: phpMyAdmin gibi bir veritabanı yönetim aracından aşağıdaki SQL sorgusunu çalıştırarak otomatik yüklenen verinin boyutunu görebilirsiniz:
SELECT SUM(LENGTH(option_value)) / 1024 / 1024 FROM wp_options WHERE autoload = 'yes';
Eğer sonuç 1-2 MB’ın üzerindeyse, bu tabloda optimizasyon yapmanız gerektiği doğrulanır.
Bölüm 2: Kapsamlı ve Uygulamalı Çözüm Stratejileri
Artık sorunun teknik kökenlerini bildiğimize göre, her birini hedef alan çözümlere geçebiliriz.
1. Önbellekleme (Caching) Masterclass: Sadece Kurmak Yetmez
Önbellekleme, CPU kullanımını düşürmenin en etkili yoludur. Mekanizmayı daha iyi anlayalım:
- Sayfa Önbellekleme (Page Caching): Bu en temel ve en etkili türdür. Ziyaretçiye sunulan dinamik PHP sayfasının tamamen statik bir HTML kopyasını oluşturur. Sunucu, PHP’yi çalıştırmak ve veritabanı sorguları yapmak yerine, bu hazır HTML dosyasını doğrudan sunar. Bu, CPU kullanımını %80-90 oranında azaltabilir.
- Araçlar: WP Rocket (premium, en kolayı), LiteSpeed Cache (LiteSpeed sunucularda en iyisi), W3 Total Cache (gelişmiş, çok ayar gerektirir).
- Nesne Önbellekleme (Object Caching): Bu daha ileri bir tekniktir. Sık kullanılan ve tekrar tekrar çalıştırılan veritabanı sorgularının sonuçlarını, disk yerine doğrudan sunucunun belleğinde (RAM) tutar. Redis veya Memcached gibi teknolojilerle çalışır. Bir sorgunun sonucu bellekte varsa, WordPress veritabanına hiç gitmez. Bu, özellikle karmaşık sorgular yapan siteler ve WooCommerce gibi dinamik platformlar için CPU ve veritabanı yükünü ciddi anlamda azaltır.
- Uygulama: Hosting firmanızın Redis veya Memcached desteği sunması gerekir. Ardından, ilgili eklenti (örn. “Redis Object Cache”) ile WordPress’e entegre edilir.
- Veritabanı Önbellekleme: W3 Total Cache gibi eklentiler, sorgu sonuçlarını diskte saklayarak bir tür nesne önbellekleme simülasyonu yapar, ancak Redis/Memcached kadar etkili değildir.
2. Gerçek Cron Job Kurulumu (Adım Adım)
WP-Cron’un yarattığı CPU artışlarını tamamen ortadan kaldırmak için:
- WP-Cron’u Devre Dışı Bırakın: Sitenizin kök dizinindeki
wp-config.php
dosyasını açın ve/* That's all, stop editing! */
satırından önce şu kodu ekleyin:PHPdefine('DISABLE_WP_CRON', true);
- Sunucudan Cron Job Ayarlayın: Hosting panelinize (cPanel, Plesk vb.) girin ve “Cron Jobs” bölümünü bulun.
- Yeni Bir Cron Job Oluşturun: Belirli aralıklarla (örneğin saatte iki kez, yani her 30 dakikada bir) çalışacak şekilde ayarlayın. Çalıştırılacak komut alanına şunu yazın (siteniz.com’u kendi alan adınızla değiştirin):
Bash
wget -q -O - https://siteniz.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Bu komut, sunucunuzun kendisinin, belirlediğiniz aralıklarla
wp-cron.php
dosyasını tetiklemesini sağlar. Bu sayede zamanlanmış görevleriniz ziyaretçi trafiğinden bağımsız, düzenli ve kontrollü bir şekilde çalışır.
3. Heartbeat API’yi Kontrol Altına Almak
Bu API’yi tamamen kapatmak bazı işlevleri bozabilir. En iyi çözüm, çalışma aralığını uzatmaktır.
- Eklenti ile Çözüm: Heartbeat Control by WP Rocket gibi bir eklenti kurun. Bu eklenti, Heartbeat API’nin yönetici panelinde, site ön yüzünde ve yazı düzenleyicide hangi sıklıkla çalışacağını (örneğin 15 saniye yerine 120 saniyeye çıkarmak) veya tamamen devre dışı bırakılacağını ayarlamanıza olanak tanır. Genellikle aralığı 60-120 saniyeye çıkarmak çoğu site için güvenli ve etkilidir.
4. Gelişmiş Veritabanı Optimizasyonu
wp_options
Temizliği: “Advanced Database Cleaner” gibi eklentiler,wp_options
tablonuzdaki “yetim” kalmış (artık bir eklentiye ait olmayan) satırları bulmanıza yardımcı olur.- Autoload Verilerini Yönetin: Aynı eklentilerle veya
SELECT option_name, LENGTH(option_value) FROM wp_options WHERE autoload = 'yes' ORDER BY LENGTH(option_value) DESC;
sorgusuyla en büyük autoload verilerini tespit edip, gereksiz olanları (autoload='no'
olarak) değiştirebilirsiniz. Uyarı: Bu ileri düzey bir işlemdir ve sitenizi bozabilir. Ne yaptığınızdan emin değilseniz bir uzmana danışın. - Veritabanı Tablolarını Optimize Edin: phpMyAdmin üzerinden tüm tabloları seçip “Onar” (Repair) ve “Optimize Et” (Optimize) komutlarını çalıştırmak, tablo verimliliğini artırabilir. WP-Optimize eklentisi bunu sizin için otomatik yapar.
5. Hosting ve Altyapısal İyileştirmeler
- PHP Sürümünün Önemi: PHP 7.4’ten PHP 8.1’e geçmek, aynı donanımda saniyede işlenebilen istek sayısını neredeyse iki katına çıkarabilir. Çünkü PHP 8.x sürümleri, JIT (Just-In-Time) compiler gibi verimliliği artıran devrimsel teknolojiler içerir. Bu, CPU’nun aynı işi daha az “düşünerek” yapmasını sağlar. Hosting panelinizden tek tıkla PHP sürümünüzü yükseltebilirsiniz.
- Doğru Hosting Seçimi: Paylaşımlı hosting, bir apartman dairesi gibidir; komşunuzun (aynı sunucudaki başka bir site) yarattığı gürültü (yüksek CPU kullanımı) sizi de etkiler. VPS (Virtual Private Server) ise size özel kaynaklar (garantili CPU çekirdeği ve RAM) sunan bir dubleks daire gibidir. Siteniz iş yapıyor ve düzenli trafik alıyorsa, bu yatırım kaçınılmazdır.
Sonuç ve Eylem Planı
Yüksek CPU kullanımı, tek bir butona basarak çözülecek bir sorun değil, bir dizi optimizasyon ve doğru altyapı seçiminin sonucudur.
- Acil Durum (İlk 1 Saat): Bir önbellekleme eklentisi (WP Rocket veya LiteSpeed Cache) kurup temel ayarlarını yapın. Bu, kanamayı durdurmak gibidir.
- Teşhis (İlk Gün): Query Monitor kurarak yavaş sorguları ve sorunlu eklentileri tespit edin. Heartbeat Control ile AJAX isteklerini yavaşlatın.
- Kalıcı İyileştirme (İlk Hafta): WP-Cron’u devre dışı bırakıp gerçek cron job kurun. Veritabanınızı WP-Optimize ile temizleyin. PHP sürümünüzü güncelleyin.
- Geleceğe Yatırım (İlk Ay): Eğer sorunlar devam ediyorsa, trafiğiniz ve ihtiyaçlarınız mevcut hosting paketinizi aşmış demektir. VPS’e geçişi ve Redis gibi bir nesne önbellekleme sistemini planlayın.
Bu detaylı ve doğrulanmış adımları izleyerek, sunucunuzun “beynini” rahatlatabilir, sitenizi hızlandırabilir ve ziyaretçilerinize kesintisiz bir deneyim sunabilirsiniz.