DevOps and Infrastructure

Linux Performans İnce Ayarı: Pratik Bir Kılavuz

Yüksek performanslı Linux sistemleri yönetmek yalnızca donanım yükseltmelerinden daha fazlasını gerektirir. Sık sık darboğazlar çekirdek parametrelerinde, dosya sistemi yapılandırmalarında ve işlem zamanlamasında gizlidir. DevOps mühendisleri ve sistem yöneticileri için Linux çekirdeğini nasıl ince ayarlayacaklarını anlamak, maksimum veri akışını ve minimum gecikmeyi sağlamak için hayati önem taşır. Bu kılavuz, bellek yönetimi, G/Ç işlemleri ve ağ yığını ince ayarı üzerine odaklanarak altyapınızı optimize etmek için uygulanabilir stratejiler sunar.

Sistem Metrikleri ve Taban Değerlerin Anlaşılması

Herhangi bir ince ayar yapmadan önce bir taban değer oluşturmak hayati önem taşır. Ölçemediğiniz bir şeyi optimize edemezsiniz. top, vmstat ve iostat gibi araçlar, CPU, bellek ve disk etkinliği hakkında anlık içgörüler sağlar. Daha derinlemesine bir analiz için donanım performans sayaçları için perf veya kapsamlı kaynak izleme için dstat kullanmayı düşünebilirsiniz. Darboğazınızın CPU odaklı mı, G/Ç odaklı mı yoksa bellek odaklı mı olduğunu belirlemek, öncelik vermeniz gereken ince ayar parametrelerini belirleyecektir. Örneğin, yüksek bağlam değiştirme sıklığı CPU doygunluğunu gösterirken, iostat içindeki yüksek bekleme süreleri disk tıkanıklığını işaret eder.

Bellek Yönetimi ve Swappiness Değerinin İnce Ayarı

Linux, fiziksel belleği yönetmek için dinamik bir sayfa değiştirme algoritması kullanır. vm.swappiness parametresi, çekirdeğin işlemleri fiziksel bellekten çıkarıp takas diskine taşıma eğilimini kontrol eder. Varsayılan olarak bu değer 60 olarak ayarlanmıştır ve veritabanı sunucuları veya düşük gecikme süresi gerektiren uygulamalar için optimal olmayabilir. Swappiness değerini 0'a yaklaştırmak, çekirdeğin takas kullanımını son çare olarak görmesini teşvik eder ve verinin daha hızlı erişim için RAM'de kalmasını sağlar. Mevcut değeri cat /proc/sys/vm/swappiness ile görüntüleyebilir ve sysctl -w vm.swappiness=10 kullanarak geçici olarak ayarlayabilirsiniz. Yeniden başlatmalar boyunca kalıcılık sağlamak için vm.swappiness=10 değerini /etc/sysctl.conf dosyasına ekleyin.

# Mevcut swappiness değerini görüntüle
cat /proc/sys/vm/swappiness

# Swappiness değerini geçici olarak 10'a ayarla
sudo sysctl -w vm.swappiness=10

# Değişikliği kalıcı hale getir
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Dosya Sistemi G/Ç Zamanlamasının Optimize Edilmesi

Disk G/Ç'si, genellikle veritabanı ve web sunucu ortamlarındaki başlıca darboğazdır. G/Ç zamanlayıcısı, okuma ve yazma isteklerinin nasıl kuyruğa alındığını ve işlendiğini yönetir. Geleneksel dönen disklerde, gecikmeyi azalttıkları için genellikle deadline veya bfq zamanlayıcıları tercih edilir. Modern NVMe SSD'lerde ise none veya noop zamanlayıcıları daha uygundur çünkü SSD'lerde mekanik gecikme yoktur ve bu da karmaşık zamanlama algoritmalarının gereksiz yük oluşturmasına neden olur. Mevcut zamanlayıcıyı cat /sys/block/sda/queue/scheduler ile kontrol edebilirsiniz. Belirli bir cihaz için zamanlayıcıyı değiştirmek için echo none > /sys/block/sda/queue/scheduler komutunu kullanın. Üretim sistemleri için bunu, kalıcı olmasını ve doğru cihaza dinamik olarak uygulanmasını sağlamak amacıyla udev kuralları aracılığıyla yapılandırmanız gerekir.

Ağ Yığınında Asla Yapılmaması Gerekenler ve İyileştirmeler

Yüksek trafikli web sunucuları için ağ yığını önemli bir kısıtlayıcı faktör haline gelebilir. /proc/sys/net/core/rmem_max ve wmem_max değerlerinin ince ayarı, çekirdeğin bellek arabelleklerinde daha fazla veri işleyebilmesini sağlar; bu da Nginx veya Apache gibi uygulamalar için veri akışını artırır. Ayrıca, net.core.rmem_max üzerinden TCP pencere ölçeklendirmesini etkinleştirmek, yüksek bant genişliğine ve yüksek gecikmeye sahip ağları daha etkili bir şekilde kullanmaya yardımcı olur. TCP bağlantıları için kuyruk boyutunu da kontrol etmelisiniz. Yük altında "Bağlantı Reddedildi" hataları yaşıyorsanız, net.core.somaxconn değerini artırmak ve uygulama sunucunuzu yapılandırmak (örneğin, PHP-FPM'de listen.backlog ayarlamak) hayati önem taşır.

Sonuç

Linux performans ince ayarı tek seferlik bir görev değil; izleme, ayarlama ve doğrulamanın sürekli bir sürecidir. Çekirdek parametreleri optimizasyon için güçlü kaldıraçlar sunsa da, üretim ortamına dağıtılmadan önce dikkatlice uygulanmalı ve bir ön üretim (staging) ortamında kapsamlı şekilde test edilmelidir. Bellek, G/Ç ve ağ alt yapısının temel mekaniklerini anlayarak, yavaş çalışan bir sunucuyu, zorlu iş yüklerini verimli bir şekilde yönetebilen yüksek performanslı bir güce dönüştürebilirsiniz.

Share: