Bir web sitesine ne kadar bellek ve kaç çekirdek gerekir?
Sitelerin çoğuna 2 GB bellek ve bir-iki çekirdek yeter; binlerce ürünlü bir mağazaya 4 GB ve iki çekirdek gerekir. Bellek çekirdekten daha önemlidir: yetmediğinde site yavaşlar ya da çöker, bellek olmadan fazladan bir çekirdek ise neredeyse hiçbir şey kazandırmaz. Aşağıda kendi siteniz için belleği nasıl hesaplayacağınızı ve sitenin gerçekte ne kadar harcadığını nasıl öğreneceğinizi göstereceğim.
Siteniz henüz yayında değilse ve ne kadar alacağınızı bilmiyorsanız, 2 GB bellek ve bir-iki çekirdekle başlayın. Bu bir bloga, şirket sitesine ve WordPress üzerindeki küçük bir mağazaya yeter; sağlayıcıların çoğunda paketi daha sonra yeniden kurulum yapmadan büyütebilirsiniz. Site zaten çalışıyorsa tahmin yürütmenize gerek yok: beş dakikada ne kadar bellek kullandığına bakıp yaklaşık %30 pay bırakan bir paket seçebilirsiniz.
En sık yapılan hata hep aynı yöndedir: çekirdek sayısı kulağa daha ciddi geldiği için dört çekirdek ve 1 GB bellek alınır. Bir site için bu kötü bir eşleşmedir. PHP ve veritabanı bir gigabaytı dakikalar içinde tüketir, sunucu belleği diske aktarmaya başlar ve işlemci neredeyse boşta olsa bile sayfalar birkaç saniyede açılır.
Bu paraya ne alırsınız?
27 Ekim 2026 tarihli accsly kataloğundan 2.200 sağlayıcının yaklaşık 27.700 VPS paketini aldım, aylık fiyata göre sıraladım ve her fiyat basamağı için bellek, çekirdek ve diskte ortanca değeri buldum. Katalog fiyatları rubleyle tutulduğu için dolar tutarları dönüştürülmüş ve yuvarlanmıştır.
| Aylık fiyat | Bellek | Çekirdek | Disk |
|---|---|---|---|
| 3,5 $'a kadar | 1 GB | 1 | 20 GB |
| 3,5–7 $ | 2 GB, dörtte birinde 1 GB | 1 | 25 GB |
| 7–11 $ | 2 GB | 2 | 40 GB |
| 11–22 $ | 4 GB | 2 | 60 GB |
| 22–45 $ | 8 GB | 4 | 100 GB |
| 45–90 $ | 12 GB | 6 | 160 GB |
Piyasadaki olağan oran, 2 GB bellek başına bir çekirdektir. 2 GB'lık paketler neredeyse eşit bölünür: yarısında bir, yarısında iki çekirdek vardır. 4 GB'ta paketlerin %61'inde iki çekirdek, 8 GB'ta %57'sinde dört çekirdek bulunur.
Sunucunun konumu da fiyatı etkiler. 4 GB bellekli bir sunucunun ortanca fiyatı tüm ülkeler genelinde ayda yaklaşık 20 dolarken, Türkiye'deki veri merkezlerinde yaklaşık 14 dolar, Rusya'dakilerde yaklaşık 15 dolardır. Bellek miktarına göre seçkiler: 2 GB VPS, 4 GB VPS, 8 GB VPS.
Site barındıran bir sunucuda bellek nereye gider?
Veritabanlı bir PHP sitesi belleği dört tüketici arasında paylaştırır. Hangisinin ne kadar istediğini bilirseniz, gereken miktarı kâğıt üzerinde hesaplayabilirsiniz.
- Sistemin kendisi. Yeni kurulmuş bir Ubuntu veya Debian açılıştan sonra 150–300 MB kullanır.
- nginx web sunucusu onlarca megabayt kullanır, hesaba katmasanız da olur.
- PHP-FPM. Her PHP çalışan süreci 40–100 MB kullanır; on kadar eklentili bir WordPress'te veya Magento'da daha fazlası da olur. Süreç sayısı, sitenin aynı anda işlediği istek sayısı kadardır.
- MySQL veya MariaDB. En büyük tüketici budur. Veritabanı, veri ve indekslerini tuttuğu tamponu bellekte saklar; buna ek olarak her bağlantı için birkaç megabayt kullanır.
ispmanager veya FastPanel gibi bir kontrol paneli 200–500 MB daha ekler; önbellek için Redis ise 50 MB'tan başlayıp içinde sakladığınız verinin boyutuna kadar çıkar.
Diyelim ki 5.000 ürünlü ve 800 MB veritabanlı bir WooCommerce mağazanız var. Sistem 300 MB, payıyla birlikte tüm veriyi taşıyacak veritabanı tamponu 1 GB, veritabanının kendisi bunun üstüne 300 MB, 80'er MB'lık 15 PHP süreci 1,2 GB, Redis 100 MB kullanır. Toplam yaklaşık 3 GB eder. 4 GB'lık bir sunucuda geriye Linux'un dosya önbelleği olarak kullandığı bir gigabayt kalır ve bu iyi bir şeydir. Mağaza 2 GB'ta da çalışır, ama veritabanı tamponunu ve PHP süreci sayısını yarıya indirmeniz gerekir; indirim saatlerinde katalog sayfaları yavaşlar.
Peki kaç çekirdek gerekir?
Sandığınızdan daha az. Bir çekirdek her an tek bir PHP isteğini işler. Bir sayfa 200 ms'de oluşturuluyorsa, bir çekirdek saniyede bu türden beş sayfa sunabilir, iki çekirdek ise on sayfa.
Bunu ziyaretçiye çevirelim. Günde 10.000 ziyaretçisi olan bir site yaklaşık 30.000 sayfa gösterir. En yoğun saate bunun kabaca onda biri, yani 3.000 sayfa düşer; bu da saniyede birden az sayfa demektir. Bunu tek çekirdek kaldırır. İkinci çekirdek, yönetim paneli, ürün içe aktarımı, yedekleme ve arama motoru botları ziyaretçiler için siteyi yavaşlatmasın diye işe yarar. Sayfa önbelleği açıksa isteklerin çoğu PHP'ye hiç ulaşmaz.
Çekirdekler, önbelleğe alınamayan sayfaların çok olduğu yerlerde gerekir: katalog filtreleri, arama, sepet, müşteri hesabı. Ağır arka plan işleri de çekirdek tüketir; örneğin görsel işleme, pazaryerlerine ürün aktarımı ve fiyat listesi içe aktarımı. Bir de aynı sunucudaki birden fazla site.
İleride lazım olur diye çekirdeğe para ödemek yazık olur. 4 GB bellekte dört çekirdekli bir paketin ortanca fiyatı yaklaşık 27 dolar, iki çekirdekli olanınki yaklaşık 19 dolardır; fark ayda 8 dolar civarındadır. 8 GB'ta iki ile dört çekirdek arasındaki fark yalnızca yaklaşık 3 dolardır; bu bellek miktarında dört çekirdek neredeyse bedavadır. PHP için frekans da önemlidir: bir sayfa tek bir çekirdekte oluşturulur ve 4,5 GHz'de 2,2 GHz'e göre belirgin biçimde daha hızlı hazır olur. Bu tür paketler yüksek işlemci frekanslı VPS seçkisinde.
Tipik siteler için ne almalı?
- Açılış sayfası, statik site, veritabanı olmayan kartvizit sitesi: 1 GB ve tek çekirdek. Bunlar en ucuz paketlerdir, burada fazla para ödemenin anlamı yok: 1 GB VPS.
- Önbellekli WordPress blogu veya şirket sitesi: 2 GB ve bir-iki çekirdek: WordPress için VPS.
- Binlerce ürünlü bir mağaza (WooCommerce, OpenCart veya PrestaShop): 4 GB ve iki çekirdek: e-ticaret sitesi için VPS.
- Magento: en az 4 GB, büyük katalogu olan bir mağaza için 8 GB ve dört çekirdek.
- Kuyruklu ve Redis'li bir Laravel uygulaması: 2–4 GB; her kuyruk çalışanı bellekte kendi PHP sürecini tutar. Seçki: Laravel için VPS.
- Birden fazla site ve bir kontrol paneli: sitelerin ihtiyaçlarını toplayın ve panel için 0,5–1 GB ekleyin.
Site gerçekte ne kadar bellek kullanıyor?
Sunucuya SSH ile bağlanın ve şunu çalıştırın:
free -m
Çıktı aşağı yukarı şöyle olur:
total used free shared buff/cache available
Mem: 3915 1720 240 60 1955 1890
Swap: 1023 12 1011
free sütunundaki küçük sayıdan korkmayın. Linux boş belleği dosya önbelleği için kullanır (bu buff/cache sütunudur) ve programlar istediği anda geri verir. Bakmanız gereken sütun available: burada sunucuda programların şu anda alabileceği 1,9 GB var. Yoğun saatlerde available, total değerinin %10'undan azsa bellek yetersizdir.
İkinci kontrol, sunucunun takas alanını (swap) kullanıp kullanmadığıdır:
vmstat 1 10
Komut saniye arayla on kez bir satır rakam yazdırır. si ve so sütunlarına bakın: sunucunun saniyede takas alanından ne kadar veri okuduğunu ve ne kadar yazdığını gösterirler. Sıfırsa her şey yolunda, free çıktısındaki Swap satırında bir miktar kullanım görünse bile. Sürekli yüzler ve binler görüyorsanız sunucu belleği diske aktarıyordur ve bu, siteyi başka herhangi bir sorundan daha fazla yavaşlatır.
Üçüncü kontrol, sistemin bellek yetersizliği yüzünden süreç sonlandırıp sonlandırmadığıdır. Bellek tamamen bittiğinde Linux çekirdeği en büyük süreci (çoğu zaman MySQL'i) seçer ve sonlandırır. Ziyaretçiler bunu "Error establishing a database connection" hatası veya 502 olarak görür.
journalctl -k | grep -i -E 'out of memory|killed process'
Komut bir şey bulduysa, bellek en az bir kez yetmemiştir. Daha büyük bir paket alın ya da PHP'nin ve veritabanının iştahını aşağıda gösterildiği gibi azaltın.
Belleği kim yiyor: htop ve ps
htop'u çalıştırın (Ubuntu ve Debian'da apt install htop ile kurulur) ve süreçleri belleğe göre sıralamak için M tuşuna basın. RES sütunu, sürecin RAM'de ne kadar yer kapladığını gösterir. En üstte genellikle mysqld veya mariadbd ve uzun bir php-fpm süreçleri listesi olur.
PHP'ye toplamda ve süreç başına ne kadar bellek gittiğini tek satırla hesaplayabilirsiniz:
ps -eo rss,comm | awk '/php-fpm/ {s+=$1; n++} END {printf "%d processes, %.0f MB total, %.0f MB per process\n", n, s/1024, s/n/1024}'
Sonuç biraz şişkin çıkar, çünkü PHP süreçleri belleğin bir kısmını aralarında paylaşır. Tahmin için bu yeterlidir. Komutu sitede ziyaretçi varken, gündüz çalıştırın: gece süreçler uykudadır ve daha küçük görünür.
Ortalama süreç boyutu, kaç PHP sürecine izin verebileceğinizi gösterir. PHP'ye ne kadar bellek ayıracağınıza karar verin ve bunu süreç boyutuna bölün. Örneğin 80 MB'lık süreçlerle 1.200 MB, 15 süreç eder. Bu sayı havuz dosyasındaki pm.max_children parametresine yazılır; Ubuntu ve Debian'da bu dosya /etc/php/8.3/fpm/pool.d/www.conf'tur (8.3 sizin PHP sürümünüzdür). Daha yüksek bir değer koyarsanız, ziyaretçi akını sırasında PHP tüm belleği kaplar ve sistem süreçleri sonlandırmaya başlar. Daha düşük koyarsanız fazla istekler kuyrukta bekler, ama sunucu ayakta kalır.
MySQL tamponu: en büyük tüketici ve en büyük kaldıraç
Veritabanı, veri ve indeksleri bellekteki tampona sığdığı sürece hızlı çalışır. Tabloların ne kadar yer kapladığını mysql konsolunda şu sorguyla öğrenebilirsiniz:
SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024) AS mb
FROM information_schema.tables WHERE engine = 'InnoDB';
Mevcut tampon boyutu:
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
Kurulumdan sonra bu değer çoğu zaman 128 MB'tır. 800 MB veritabanlı bir mağaza için bu çok azdır: her katalog filtresi diskten okuyacaktır. Tamponun yetip yetmediğini iki sayaç gösterir:
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
Innodb_buffer_pool_reads değerini Innodb_buffer_pool_read_requests değerine bölün. İlki veritabanının kaç kez diske gitmek zorunda kaldığını, ikincisi toplam okuma sayısını gösterir. Bölüm 0,01'den küçükse, yani okumaların %1'inden azı diske gidiyorsa tampon yeterlidir. Bu rakamlara sunucu en az bir gün çalıştıktan sonra bakın.
Tamponu veri boyutu artı büyüme için %10–20 olarak ayarlamak mantıklıdır, ancak yanında PHP çalışan bir sunucuda toplam belleğin yarısını geçmemelidir. Değer, yapılandırmanın [mysqld] bölümünde innodb_buffer_pool_size = 1G satırıyla verilir (Ubuntu'da bu /etc/mysql/mysql.conf.d/mysqld.cnf, MariaDB'de /etc/mysql/mariadb.conf.d/ içindeki bir dosyadır); ardından veritabanını yeniden başlatmak gerekir. Veritabanı belleğin yarısına bile sığmıyorsa, bu daha büyük bir paket almak için dürüst bir gerekçedir. Böyle bir durumda hızlı disk de yardımcı olur; bununla ilgili web sitesi için NVMe mi SSD mi yazısına bakın.
Ne zaman bellek, ne zaman çekirdek eklemeli?
Yoğun saatte available %10'un altına düşüyorsa, vmstat çıktısında si ve so sıfır değilse ya da günlükte sonlandırılmış süreçler varsa bellek azdır. Bu durumda çekirdek eklemek işe yaramaz.
Bellek boşta olduğu hâlde site yük altında yavaşsa çekirdek azdır. uptime komutuyla kontrol edin: satırın sonundaki üç sayı son 1, 5 ve 15 dakikanın ortalama yükünü gösterir. Bunları nproc komutunun verdiği çekirdek sayısıyla karşılaştırın. Yoğun saatlerde yük uzun süre çekirdek sayısının üzerinde kalıyorsa ve htop'ta işlemciyi php-fpm süreçleri meşgul ediyorsa, daha fazla çekirdeğe ya da çoğu zaman daha ucuza gelen sayfa önbelleğine ihtiyacınız var.
Aynı sağlayıcıdaki daha büyük bir paketin işe yaramayacağı iki durum vardır. top'ta %Cpu(s) satırındaki st değeri yüksekse (en az %10), fiziksel sunucudaki komşular işlemci zamanınızı alıyordur. Burada yalnızca başka bir sağlayıcı ya da ayrılmış çekirdekli bir paket yardımcı olur. wa yüksekse işlemci diski bekliyordur; çözülmesi gereken çekirdekler değil, disktir.
İki boyut arasında kararsızsanız, paketi panelden birkaç dakikada büyütebildiğiniz bir sağlayıcıda küçük olanı alın. Satın almadan önce açıklamada paketin yeniden kurulum yapmadan değiştirilip değiştirilemediğine bakın. Siteyi birkaç yapılandırmada denemek isterseniz saatlik ücretlendirme kullanışlıdır: bir akşamlık sunucu genellikle bir doları geçmez. Paketin diğer parametreleri VPS nasıl seçilir yazısında ele alındı.