Linux Performans Ayarlama: CPU, RAM ve I/O Kaynak Analizi ve Optimizasyon Stratejileri

 · 

Linux Performans Ayarlama: CPU, RAM ve I/O Kaynak Analizi ve Optimizasyon Stratejileri

Linux Sistem Performansını Anlamak: CPU, RAM ve I/O Derinlemesine Analiz

Linux sistemlerde performans darboğazlarını tespit etmek, hizmet kesintilerini önlemek ve kaynak kullanımını optimize etmek için kritik bir adımdır. Bir sistemin yavaşlamasının ardında CPU, bellek (RAM) veya disk (I/O) kaynaklarından biri veya birkaçı yatabilir. Bu analiz, temel izleme araçları ve gerçek dünya senaryolarıyla bu darboğazları nasıl tanımlayacağınızı ve gidereceğinizi detaylandıracaktır.

CPU Performans Analizi: İşlem Gücünü Anlamak

CPU, sistemin beynidir. Yüksek CPU kullanımı her zaman kötü performans anlamına gelmez; önemli olan, bu kullanımın ne tür bir iş yükünden kaynaklandığını anlamaktır. İş yükünü analiz etmek için çeşitli araçlar mevcuttur.

Temel CPU İzleme Araçları ve Metrikleri

  • top ve htop: Anlık CPU kullanımını, çalışan süreçleri ve bunların kaynak tüketimini gösterir. Özellikle load average değerleri (1, 5 ve 15 dakikalık ortalamalar), sistemin ne kadar yoğun olduğunu hızlıca anlamak için önemlidir. Yüksek load average değerleri, CPU'nun işleyebileceğinden daha fazla görevin kuyrukta beklediğini gösterir.
  • vmstat: Sanal bellek istatistiklerini gösterir. CPU başlığı altında us (user CPU), sy (system CPU), id (idle CPU) ve özellikle wa (I/O wait CPU) değerleri kritik öneme sahiptir. Yüksek wa değeri, CPU'nun disk I/O işlemlerini beklediğini ve bir I/O darboğazının göstergesi olabileceğini işaret eder.
  • mpstat: Çok çekirdekli sistemlerde her bir CPU çekirdeğinin kullanım istatistiklerini gösterir. Belirli bir çekirdeğin veya NUMA düğümünün aşırı yüklenmesini tespit etmek için kullanılır.
  • sar: Sistem aktivite raporcusu. Geçmişe dönük performans verilerini analiz etmek için idealdir. sar -u 1 5 komutu, 1 saniye aralıklarla 5 defa CPU kullanımını raporlar.

Gerçek Dünya Senaryosu: Yüksek I/O Wait

Bir e-ticaret platformunun veritabanı sunucusu aniden yavaşladı ve kullanıcılar sayfa yükleme sürelerinin arttığından şikayet ediyor. top komutuna bakıldığında, CPU kullanımının genel olarak düşük olduğu ancak wa (I/O wait) değerinin %40-50 seviyelerinde seyrettiği görülüyor. Bu durum, CPU'nun aslında boştayken, diskten veri okunmasını veya diske veri yazılmasını beklediğini işaret eder.

Analiz ve Çözüm:

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 1 87208 1048576 123456 2048000 0 0 500 1200 100 200 5 5 40 50 0

Yukarıdaki vmstat çıktısında wa sütununun %50 olması, problemin disk I/O'da olduğunu açıkça gösterir. Bu durumda, veritabanı sorgularının optimizasyonu, daha hızlı depolama (NVMe SSD'ler) veya disk I/O'yu azaltacak önbellekleme mekanizmalarının uygulanması gibi adımlar atılır. iotop veya iostat gibi araçlarla hangi süreçlerin bu I/O yükünü oluşturduğu daha detaylı incelenir.

Bellek (RAM) Performans Analizi: Hafıza Yönetimi

Bellek darboğazları, sistemin diskten sürekli sayfa takası (swapping) yapmasına neden olarak performansı ciddi şekilde düşürebilir. Uygulamaların bellek sızıntıları veya yetersiz bellek ayırmaları yaygın sorunlardır.

Temel RAM İzleme Araçları ve Metrikleri

  • free -h: Toplam, kullanılan, boş, paylaşılan, ara bellek/önbellek ve takas alanı (swap) bellek bilgilerini insan dostu formatta gösterir. Özellikle available bellek değeri, uygulamalar için ne kadar bellek kaldığını gösterir.
  • vmstat: Bellek başlığı altında swpd (swap kullanılan), free (boş), buff (arabellek), cache (önbellek) değerleri önemlidir. si (swap in) ve so (swap out) değerlerinin yüksek olması, sistemin aktif olarak diskten/diske bellek sayfalarını taşıdığını gösterir ki bu da bir performans sorunudur.
  • slabtop: Çekirdek nesne önbelleklerini (slab cache) gösterir. Yüksek slab kullanımı, çekirdek tarafında bellek sızıntısı veya aşırı kaynak tüketimine işaret edebilir.
  • smem: Süreçlerin gerçek bellek kullanımını (RSS, PSS, USS) daha detaylı gösterir. Paylaşılan bellek alanlarını doğru bir şekilde hesaba katarak, top gibi araçlara göre daha doğru bir tüketim analizi sunar.

Gerçek Dünya Senaryosu: Aşırı Swap Kullanımı

Bir Java tabanlı mikroservis uygulaması, haftalar içinde gittikçe yavaşlamaya başlıyor. Başlangıçta performansı iyi iken, zamanla yanıt süreleri uzuyor. Sistem izlemelerinde free -h çıktısında swap used değerinin sürekli arttığı ve si/so değerlerinin yükseldiği görülüyor.

Analiz ve Çözüm:

# free -h
total used free shared buff/cache available
Mem: 7.8G 6.5G 500M 100M 800M 200M
Swap: 2.0G 1.8G 200M

free -h çıktısında görüldüğü üzere 7.8GB toplam bellekten 6.5GB kullanılmış ve sadece 200MB kullanılabilir bellek kalmış. 2GB swap alanının 1.8GB'ının kullanılması, sistemin ana belleği tükettiğini ve diske sayfa takası yaptığını gösterir. Bu durum, uygulamanın bellek sızıntısı yaşadığı veya yetersiz bellek tahsisi yapıldığı anlamına gelebilir.

İlk olarak ps aux --sort -rss | head -n 10 komutu ile en çok bellek kullanan süreçler belirlenir. Eğer Java uygulaması başı çekiyorsa, JVM'in heap ve metaspace ayarları kontrol edilir, gerekirse bellek profilleme araçları (JProfiler, VisualVM) ile bellek sızıntıları tespit edilir. Alternatif olarak, sunucuya daha fazla RAM eklemek veya uygulamayı daha küçük, bellek dostu servislere ayırmak da bir çözüm olabilir.

I/O Performans Analizi: Disk ve Ağ Verimliliği

Disk I/O, özellikle veritabanları, loglama sistemleri ve dosya sunucuları gibi I/O yoğun uygulamalar için kritik bir darboğaz noktasıdır. Ağ I/O ise özellikle yüksek trafikli web sunucuları veya veri aktarım uygulamaları için önem taşır.

Temel I/O İzleme Araçları ve Metrikleri

  • iostat: Disk I/O istatistiklerini gösterir. Özellikle %util (diskin ne kadar meşgul olduğu), r/s (saniyedeki okuma isteği), w/s (saniyedeki yazma isteği), kB_read/s (saniyedeki okuma baytı) ve avgqu-sz (ortalama kuyruk boyutu) metrikleri önemlidir. Yüksek %util ve avgqu-sz değerleri disk darboğazına işaret eder.
  • iotop: Süreç bazında anlık disk I/O kullanımını gösterir. Hangi sürecin ne kadar okuma/yazma yaptığını hızlıca tespit etmek için kullanışlıdır.
  • blktrace ve btt: Blok katmanı izleme araçlarıdır. Çok daha düşük seviyede disk I/O olaylarını yakalayarak derinlemesine analiz sağlar. Genellikle daha karmaşık sorunların tespiti için kullanılır.
  • fio: Disk performansını test etmek için kullanılan esnek bir I/O test aracıdır. Farklı I/O desenleri (sıralı/rastgele, okuma/yazma, blok boyutu) ile depolama biriminin gerçek potansiyelini ölçmek için kullanılır.

Gerçek Dünya Senaryosu: Yavaşlayan Veritabanı Geri Yükleme

Yeni bir veritabanı sunucusuna büyük bir SQL yedeği geri yükleniyor. Geri yükleme işlemi saatler sürüyor ve beklenenden çok daha yavaş ilerliyor. iostat -x 1 komutu çalıştırıldığında, disk kullanımının (%util) sürekli %95-100 seviyelerinde olduğu ve avgqu-sz değerinin de yüksek seyrettiği görülüyor.

Analiz ve Çözüm:

# iostat -x 1
avg-cpu: %user %nice %system %iowait %steal %idle
5.00 0.00 10.00 80.00 0.00 5.00

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 10.00 500.00 100.00 8000.00 32.00 15.00 30.00 3.00 35.00 2.00 98.00

iostat çıktısı, sda diskinin %98 oranında kullanıldığını ve avgqu-sz değerinin 15 gibi yüksek bir seviyede olduğunu gösteriyor. Bu, disk I/O'nun bir darboğaz olduğunu ve disk sürücüsünün gelen istekleri zamanında işleyemediğini işaret eder. await değerinin 30ms olması da her bir I/O isteğinin ortalama 30 milisaniye beklediğini gösterir.

Bu durumda yapılabilecekler şunlardır: Veritabanı geri yükleme parametrelerini optimize etmek (eşzamanlılık, blok boyutu), daha yüksek IOPs (saniyedeki I/O işlemleri) sunan bir depolama birimi kullanmak (örneğin, daha hızlı NVMe SSD'ler veya RAID yapılandırmaları), yedekleme/geri yükleme sırasında disk I/O'yu azaltmak için veritabanı ayarlamalarını gözden geçirmek veya yedeği farklı bir diske alıp buradan geri yüklemek.

Sonuç

Linux performans ayarlaması, sürekli bir döngüdür: izle, analiz et, ayarla ve tekrar izle. CPU, RAM ve I/O kaynaklarının her biri, bir sistemin genel performansını doğrudan etkileyen potansiyel darboğaz noktalarıdır. Yukarıda bahsedilen araçları ve senaryoları anlayarak, karmaşık üretim ortamlarındaki performans sorunlarını etkili bir şekilde tespit edebilir ve çözüme kavuşturabilirsiniz. Unutmayın, her sistem ve iş yükü farklıdır; bu nedenle, belirli bir bağlamda hangi metriklerin en önemli olduğunu anlamak kritik öneme sahiptir.

← Blog Listesine Dön