Sunucuya bağlandınız, uptime yazdınız ve "load average: 7.84, 6.20, 4.11" gibi bir satır gördünüz. Bu sayı yüksek mi, düşük mü, panik yapmanız gerekiyor mu? Load average (yük ortalaması), Linux sunucularda en sık bakılan ama en sık yanlış yorumlanan göstergelerden biridir. Çoğu kişi onu "CPU kullanım yüzdesi" sanır; oysa Linux'ta bu sayı yalnızca işlemciyi değil, diski bekleyen süreçleri de sayar.

Bu rehberde load average'ın Linux'ta tam olarak neyi saydığını, CPU çekirdek sayısıyla nasıl karşılaştırılacağını, uptime, top, htop, vmstat ve iostat çıktılarının nasıl okunacağını ve "load yüksek ama CPU boşta" durumunun neden çoğu zaman bir disk (I/O) sorunu olduğunu adım adım anlatıyoruz. Komutlar Ubuntu 24.04 LTS için yazıldı; diğer dağıtımlarda da büyük ölçüde aynıdır.

Load average Linux'ta neyi sayar?

Load average Linux'ta neyi sayar? R (running/runnable), D (uninterruptible sleep), Sayılmayanlar

Kaynak, çekirdeğin sunduğu /proc/loadavg dosyasıdır. proc_loadavg(5) kılavuz sayfasına göre ilk üç alan, çalışma kuyruğundaki (durum R) veya disk G/Ç'sini bekleyen (durum D) işlerin 1, 5 ve 15 dakikalık ortalamalarıdır. uptime(1) sayfası da aynı şeyi söyler: yük ortalaması, çalışabilir ya da kesintisiz uyku (uninterruptible) durumundaki süreçlerin ortalama sayısıdır ve kesintisiz uykudaki bir süreç örneğin diski beklemektedir.

bash
cat /proc/loadavg
# Örnek çıktı biçimi:
# 2.15 1.80 1.42 3/412 98765
# 1 dk | 5 dk | 15 dk | çalışabilir/toplam görev | son oluşturulan PID
  • R (running/runnable): CPU üzerinde çalışan veya CPU sırası bekleyen süreçler.
  • D (uninterruptible sleep): Genellikle disk veya ağ dosya sistemi gibi bir G/Ç işleminin bitmesini bekleyen, sinyalle bile kesilemeyen süreçler.
  • Sayılmayanlar: Normal uykudaki (S) süreçler, örneğin bağlantı bekleyen boşta bir Nginx işçisi, yükü artırmaz.

Üç sayı nasıl okunur?

Üç değer sırasıyla son 1, 5 ve 15 dakikayı özetler. Aralarındaki ilişki, yükün yönünü gösterir:

ÖrnekYorum
0.50, 2.40, 4.10Yük düşüyor; sorun geçmiş veya bitiyor.
6.80, 3.10, 1.20Yük yeni yükseliyor; şimdi bakmanın tam zamanı.
4.00, 4.05, 3.98Uzun süredir sabit bir yük var; çekirdek sayısıyla karşılaştırın.

Çekirdek sayısıyla karşılaştırma

Çekirdek sayısıyla karşılaştırma: 1'in altında, 1 civarı, Sürekli 1'in üzerinde

uptime(1) açıkça belirtir: load average, CPU sayısına göre normalize edilmez. Tek CPU'lu bir sistemde 1 yükü, işlemcinin sürekli dolu olduğu anlamına gelir; 4 CPU'lu bir sistemde ise aynı 1 değeri, zamanın yüzde 75'inde boşta kalındığını gösterir. Önce sunucunuzun kaç mantıksal işlemcisi olduğunu öğrenin:

bash
nproc
lscpu | grep -E "^CPU\(s\)|Thread|Core|Model name"
Load / çekirdek oranıKaba yorum
1'in altındaKaynaklar talebi karşılıyor, bekleyen iş az.
1 civarıKapasite dolmak üzere; yanıt süreleri izlenmeli.
Sürekli 1'in üzerindeİş birikiyor; nedeni (CPU mu, G/Ç mi) bulunmalı.

Adım 1: uptime ve top ile ilk bakış

bash
uptime
top

top(1) çıktısının üst kısmındaki %Cpu(s) satırı, yükün kaynağını hemen ayırt etmenizi sağlar:

AlanAnlamı (top kılavuzu)Yüksekse
usNice değeri değiştirilmemiş kullanıcı süreçleriUygulama kodu CPU yakıyor (PHP, Node, Python)
syÇekirdek (kernel) süreçleriÇok sayıda sistem çağrısı, ağ trafiği, bağlam değişimi
waG/Ç tamamlanmasını beklemeDisk darboğazı; load yükselir ama CPU aslında boşta
stHipervizörün bu VM'den aldığı süre (steal)Sanal sunucuda fiziksel CPU paylaşımı kaynaklı bekleme
idBoşta geçen süreLoad yüksek ve id yüksekse büyük ihtimalle G/Ç sorunu

top içinde 1 tuşu her çekirdeği ayrı satırda gösterme ile tek özet satır arasında geçiş yapar; P CPU'ya, M belleğe göre sıralar. S sütununda D görünen süreçler doğrudan load'a eklenen G/Ç bekleyenlerdir. Daha okunaklı bir arayüz isterseniz sudo apt install htop ile htop kurabilirsiniz; aynı bilgileri renkli çubuklarla gösterir.

Adım 2: vmstat ile R ve B sütunları

Adım 2: vmstat ile R ve B sütunları: Çalışabilir süreçler (çalışan veya sıra bekleyen), G/Ç bitmesini bekleyen bloklu süreçler, si / so, bi / bo

vmstat(8) birkaç saniyelik örneklerle yükün bileşenlerini ayırır. İlk satır açılıştan beri ortalamadır; asıl bakmanız gerekenler sonraki satırlardır:

bash
vmstat 2 10   # 2 saniye arayla 10 örnek
SütunAnlamıNe aramalı?
rÇalışabilir süreçler (çalışan veya sıra bekleyen)Çekirdek sayısından sürekli büyükse CPU darboğazı
bG/Ç bitmesini bekleyen bloklu süreçlerSürekli 0'dan büyükse disk darboğazı
si / soDiskten belleğe / bellekten diske swap (saniyede)Sürekli sıfırdan büyükse RAM yetmiyor
bi / boBlok cihazdan okunan / yazılan KiB/sDisk trafiğinin büyüklüğü
waG/Ç bekleme yüzdesiYüksekse sorun diskte
stSanal makineden çalınan süreYüksekse fiziksel CPU paylaşımı yoğun

Kabaca: r yüksekse yük CPU kaynaklıdır, b ve wa yüksekse disk kaynaklıdır, si/so sürekli hareketliyse bellek yetersizliği diski de meşgul ediyordur. Bellek tarafı için OOM killer rehberi ve swap alanı yazısı işinize yarar.

Adım 3: Yüksek load, düşük CPU: I/O wait

En kafa karıştıran tablo budur: load 10, ama top CPU'nun yüzde 70'inin boşta olduğunu söylüyor. Linux'ta bunun en olası açıklaması, D durumunda bekleyen süreçlerdir. Hangi cihazın tıkandığını görmek için sysstat paketindeki iostat aracını kullanın:

bash
sudo apt install sysstat
iostat -xz 2 5

Ubuntu 24.04 iostat(1) sayfasındaki tanımlarla en önemli alanlar:

AlanAnlamıYorum
%iowaitCPU boştayken bekleyen disk isteği olan zamanın yüzdesiSistem genelinde G/Ç beklemesi
r_await / w_awaitOkuma / yazma isteklerinin ortalama karşılanma süresi (ms)NVMe'de genelde çok düşüktür; belirgin artış darboğaz işaretidir
aqu-szCihaza gönderilen isteklerin ortalama kuyruk uzunluğuBüyüyen kuyruk, diskin yetişemediğini gösterir
%utilCihaza istek gönderilen zamanın yüzdesiParalel istek işleyebilen NVMe/SSD'lerde yüzde 100 olması tek başına doygunluk demek değildir

Sonra diski kimin kullandığını bulun. D durumundaki süreçleri listelemek ve süreç bazında G/Ç görmek için:

bash
# D durumundaki süreçler ve çekirdekte bekledikleri fonksiyon
ps -eo pid,stat,wchan:32,cmd | awk '$2 ~ /^D/'

# Süreç bazında okuma/yazma (sysstat paketi)
pidstat -d 2 5
  • Disk dolmak üzereyse yazma işlemleri yavaşlar ve hatalar başlar; disk doldu hatası ve inode doldu hatası yazılarına bakın.
  • Büyüyen log dosyaları sürekli yazma yükü yaratabilir; logrotate rehberi bu konuyu anlatır.
  • Yedekleme saatleri: rsync, mysqldump veya sıkıştırma işleri belirli saatlerde load'u yükseltiyorsa bunları düşük trafikli saatlere taşıyın; rsync ile yedekleme.
  • Swap fırtınası: si/so sürekli hareketliyse sorun disk değil RAM'dir; disk yalnızca belirtidir.
  • Veritabanı sorguları: İndekssiz sorgular büyük tabloları diskten tekrar tekrar okur.

Adım 4: Yük CPU kaynaklıysa

us veya sy yüksek ve vmstat içinde r çekirdek sayısını sürekli aşıyorsa, yükü hangi sürecin oluşturduğunu bulmanız gerekir. Bunun ayrıntılı yöntemi (ps sıralama, pidstat, iş parçacığı bazında inceleme, PHP-FPM, MySQL ve Node örnekleri) CPU yüzde 100 tespit rehberinde anlatılıyor.

Önleme: load'u izlemek

  • Load, CPU, iowait ve disk doluluğunu düzenli kaydedin. Temeller için sunucu izleme temelleri, grafik ve uyarılar için Prometheus ve Grafana yazılarına bakın.
  • Sitenizin dışarıdan erişilebilirliğini ayrı bir sunucudan izleyin; Uptime Kuma kurulumu bunun için uygun bir başlangıçtır.
  • Uyarıyı tek bir 1 dakikalık değere değil, 5 veya 15 dakikalık ortalamanın çekirdek sayısını uzun süre aşmasına bağlayın; kısa sıçramalar normaldir.
  • Yeni bir eklenti, cron işi veya yazılım güncellemesinden sonra load profilinin değişip değişmediğini kontrol edin.

Sık Sorulan Sorular

Load average 1 ne demek?

Son dakikada ortalama bir sürecin çalıştığı veya beklediği anlamına gelir. Tek çekirdekli sunucuda bu tam doluluktur; 4 çekirdekli sunucuda ise kapasitenin dörtte biri kullanılıyor demektir. Değeri mutlaka nproc çıktısıyla birlikte yorumlayın.

Load yüksek ama CPU boşta, neden?

Linux load average'a disk G/Ç'sini bekleyen D durumundaki süreçleri de katar. top içindeki wa, vmstat içindeki b sütunu ve iostat -xz ile diski kontrol edin. Ağ üzerinden bağlanmış bir dosya sistemi (NFS gibi) yanıt vermediğinde de süreçler D durumunda takılabilir.

Load average yüzde olarak ifade edilebilir mi?

Hayır, load bir yüzde değil, ortalama süreç sayısıdır. Yüzdeye benzer bir fikir için load değerini çekirdek sayısına bölebilirsiniz; ama G/Ç bekleyen süreçler de sayıldığı için bu oran CPU kullanımıyla aynı şey değildir.

Sunucuyu yeniden başlatmak load'u düzeltir mi?

Geçici olarak düşürebilir, ama nedeni ortadan kaldırmaz. Yeniden başlatmadan önce top, vmstat 2 10 ve iostat -xz 2 5 çıktılarını kaydedin; aksi halde sorunun izini kaybedersiniz. Logların nerede olduğunu Linux loglarını okuma yazısında bulabilirsiniz.

Yazılım ve hizmet adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen projeler veya şirketlerle ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: CPU yüzde 100 tespiti · OOM killer çözümü · inode doldu hatası · logrotate rehberi · Sunucu izleme temelleri · Disk doldu hatası · Linux sunucu komutları