DevOps and Infrastructure

Zirve Performansını Açığa Çıkarmak: Linux Performans İnce Ayarı İçin Kapsamlı Bir Rehber

DevOps ve altyapı yönetimi dünyasında "yeterince iyi" genellikle optimumun düşmanıdır. Sistemler büyüdükçe, Linux dağıtımları tarafından sağlanan varsayılan yapılandırmalar—stabil ve güvenli olmalarına rağmen—modern yüksek verimli uygulamaların özel yük talepleri için ince ayar yapılmamış olabilir. Yüksek frekanslı ticaret motorları, büyük ölçekli veritabanları veya konteyner orkestrasyon platformları çalıştırıyor olun, Linux çekirdeğinin temel mekaniklerini anlamak maksimum performansı elde etmek için esastır.

Bu rehber, temel donanım yükseltmelerinin ötesine geçerek yazılım düzeyinde ince ayarı keşfeder. Bellek yönetimi, dosya sistemi G/Ç'si, ağ yığını optimizasyonu ve işlem zamanlaması gibi kritik alanlara derinlemesine inerek sistem yanıt süresini ve verimini artırmak için uygulanabilir stratejiler sunacağız.

Bellek Alt Sistemini Anlamak

Bellek yönetimi genellikle Linux sistemlerindeki ilk darboğazdır. Çekirdeğin Bellek Dışı (OOM) öldürücüsü ve agresif sayfa önbelleği yönetimi, bazen ağır yük altında alt-optimum performansa yol açabilir. Çekirdeğin bellek davranışıyla etkileşim kurmanın temel aracı /proc/sys/vm dosyasıdır.

Dikkate alınması gereken en etkili parametrelerden biri vm.swappiness'tır. Bu parametre, çekirdeğin işlemleri fiziksel bellekten alıp takas diski üzerine taşıma eğilimini kontrol eder. Yüksek bir değer (varsayılan olan 6'ya yakın), performanstan hassas uygulamalar için zararlı olan takas yapmayı teşvik eder. Çoğu veritabanı ve uygulama sunucusu için bu değerin 1 veya 10'a düşürülmesi, disk takasından kaynaklanan G/Ç bekleme sürelerini önemli ölçüde azaltır.

# Swappiness değerini geçici olarak 1'e değiştir
sudo sysctl vm.swappiness=1

# Değişikliği yeniden başlatmalar boyunca kalıcı hale getir
echo "vm.swappiness=1" | sudo tee -a /etc/sysctl.conf

Başka bir kritik parametre de vm.dirty_ratio ve vm.dirty_background_ratio'dur. Bunlar, kirli sayfaları (değiştirilmiş ancak henüz diske yazılmamış) tutabilen sistem belleğinin yüzdesini tanımlar. Bu değerler çok yüksekse, çekirdek sonunda bu sayfaları temizlemeye karar verdiğinde ani bir büyük G/Ç patlaması yaşama riski vardır; bu da gecikme patlamalarına neden olur. vm.dirty_background_ratio değerinin 5-10'a düşürülmesi daha pürüzsüz ve sürekli bir yazma deseni sağlar.

Ağ Performansını Optimize Etme

Mikroservisler ve API ağ geçitleri için ağ gecikmesi ve bağlantı verimi hayati önem taşır. Linux'taki TCP yığını /proc/sys/net/ üzerinden yüksek düzeyde yapılandırılabilir. Yüksek eşzamanlılık ortamlarında yaygın bir sorun, geçici portların tükenmesidir. Kullanılabilir portların aralığını aşağıdaki komutla artırabilirsiniz:

# Geçici port aralığını 65535'e artır
sudo sysctl -w net.ipv4.ip_local_port_range="1024 65535"

Ayrıca, TCP pencere ölçeklendirmesini ve seçici onaylamaları (SACK) etkinleştirmek, yüksek bant genişliğine ve yüksek gecikmeye sahip ağlar (birden fazla kullanılabilirlik bölgesi boyunca uzananlar gibi) için hayati önem taşır. Bu ayarlar, TCP yığınının mevcut bant genişliğini daha iyi kullanmasını ve paket kaybından daha verimli bir şekilde kurtulmasını sağlar.

sudo sysctl -w net.ipv4.tcp_window_scaling=1
sudo sysctl -w net.ipv4.tcp_sack=1
sudo sysctl -w net.ipv4.tcp_timestamps=1

Dosya Sistemi G/Ç Zamanlaması

G/Ç zamanlayıcısı, okuma ve yazma isteklerinin blok katmanı tarafından nasıl ele alındığını belirler. Varsayılan zamanlayıcı dağıtıma göre değişir; modern NVMe sürücüler için genellikle mq-deadline veya bfs'e geçer, ancak doğru zamanlayıcının aktif olduğundan emin olmak çok önemlidir. SSD'ler için geleneksel cfq veya deadline zamanlayıcılarına kıyasla gereksiz arama yükünü azalttıkları için genellikle none veya mq-deadline zamanlayıcıları tercih edilir.

Mevcut zamanlayıcınızı şu komutla kontrol edebilirsiniz:

cat /sys/block/sda/queue/scheduler

PostgreSQL veya MySQL gibi veritabanları için, dosya sisteminin noatime gibi uygun seçeneklerle monte edildiğinden emin olmak, bir dosya her okunduğunda gereksiz meta veri güncellemelerini önleyerek G/Ç yükünü azaltır.

# noatime ile örnek monte komutu
sudo mount -o remount,noatime /

İşlem ve CPU Zamanlaması

Linux varsayılan olarak Tamamen Adil Zamanlayıcıyı (CFS) kullanır. Genel amaçlı hesaplama için mükemmel olsa da, belirli yükler farklı önceliklerden faydalanabilir. niceness ve ionice komutlarını kullanarak kritik hizmetlere öncelik verebilirsiniz. Örneğin, veritabanı demonunuzun yoğunluk anlarında her zaman CPU süresi almasını sağlamak isteyebilirsiniz.

# Veritabanı işlemi için nice seviyesini -5'e (daha yüksek öncelik) ayarla
sudo renice -n -5 -p [PID]

Ayrıca, CPU yönetici ayarlarını anlamak da hayati önem taşır. Varsayılan olarak, birçok sistem yüküne göre CPU frekansını ölçeklendiren ondemand veya powersave yöneticisini kullanır. Gecikmeden hassas uygulamalar için performance yöneticisine geçmek, CPU'nun maksimum frekansta çalışmasını sağlayarak frekans ölçekleme gecikmesini ortadan kaldırır.

# Mevcut yöneticiyi kontrol et
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# Performans olarak ayarla
sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor <<< performance

Sonuç

Linux performans ince ayarı tek seferlik bir görev değil, izleme, test etme ve ayarlama sürecinin sürekli bir sürecidir. Yukarıda tartışılan yapılandırmalar yüksek performanslı ortamlar için sağlam bir temel sağlasa da, değişikliklerden önce ve sonra her zaman özel yükünüzü ölçtüğünüzden emin olun. sysstat, vmtouch ve tcpdump gibi araçlar, yığınızdaki belirli darboğazları belirlemek için paha biçilemezdir. Bu çekirdek düzeyindeki kontrolleri ustalaştırdığınızda, pasif bir sistem yöneticisinden aktif bir performans mühendisine dönüşür ve altyapınızın modern uygulama teslimatının taleplerini karşılayabilmesini sağlarsınız.

Share: