DevOps and Infrastructure

Linux Performans İnce Ayarı Ustalaşmak: Çekirdek Parametrelerinden G/Ç Zamanlamasına

DevOps ve altyapı yönetiminin yüksek riskli dünyasında uygulama gecikmesi genellikle sadece bir belirtidir. Asıl sorun, Linux çekirdeğinin donanım kaynaklarıyla etkileşiminin derinliklerinde saklıdır. Orta ve ileri düzey geliştiriciler için Linux ortamını nasıl ince ayar yapacaklarını bilmek sadece bir optimizasyon tekniği değil; ölçeklenebilirlik, kararlılık ve maliyet etkinliği sağlamak için bir zorunluluktur.

Performans ince ayarı herkese uyan tek bir çözüm değildir. Bir veritabanı sunucusu, bir web ön ucu veya yüksek frekanslı ticaret düğümünden çok farklı gereksinimlere sahiptir. Ancak kaynak yönetiminin temel ilkeleri tutarlıdır. Bu rehber, bellek yönetimi giriş/çıkış stratejilerine ve ağ yığını optimizasyonlarına geçerek Linux performans ince ayarının kritik katmanlarını keşfeder.

Bellek Yönetimi ve Takas (Swap) Davranışı

Bellek baskısı, üretim ortamlarındaki en yaygın darboğazlardan biridir. Varsayılan olarak Linux, RAM'i önbellekleme için serbest bırakmak üzere etkin olmayan sayfaları diske takas etmeye (swap out) isteklidir. Bu genellikle iyi bir davranış olsa da, yüksek veri işleme kapasitesine sahip uygulamalarda takas işlemi felaket düzeyinde gecikme artışlarına yol açabilir.

Yapılması gereken ilk ayarlardan biri vm.swappiness parametresidir. 0 ile 100 arasında değişen bu değer, çekirdeğin ne kadar agresif bir şekilde takas yapacağını belirtir. Gecikme duyarlı uygulamalar için genellikle takas işlemini en aza indirmek istersiniz.

# Verilerin RAM'de kalmasını tercih etmek için takas hassasiyetini 10'a düşürün
sudo sysctl -w vm.swappiness=10

# Yeniden başlatmalar boyunca kalıcı hale getirin
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

Ayrıca vm.vfs_cache_pressure değerini de ince ayar etmeyi düşünün. Bu değer, dizin ve inode önbellekleri için kullanılan belleği geri kazanma ile sayfa önbelleği arasındaki dengeyi kontrol eder. Bu değeri düşürmek, çekirdeğin dizin ve inode önbelleklerini daha uzun süre tutmasını teşvik eder; bu da dosya sistemi yoğun iş yükleri için faydalıdır.

# Dizin/inode önbelleklerinin bellekte daha uzun süre kalmasını sağlamak için önbellek baskısını düşürün
sudo sysctl -w vm.vfs_cache_pressure=50

G/Ç Zamanlayıcılarını Optimize Etme

G/Ç zamanlayıcısı, uygulama ile depolama alt sistemi arasında yer alır ve G/Ç isteklerinin hangi sırada işleneceğine karar verir. Varsayılan zamanlayıcı dağıtıma göre değişir ancak modern NVMe sürücüler için genellikle mq-deadline, döner diskler için ise bfq kullanılır. Ancak belirli iş yükleri farklı zamanlayıcılardan faydalanabilir.

SSD'ler ve NVMe sürücüler için none veya mq-deadline zamanlayıcıları genellikle en uygunudur çünkü donanım, sıraya alma işlemini çekirdek yazılım katmanından daha verimli bir şekilde yönetir. Mevcut zamanlayıcınızı şu komutla kontrol edebilirsiniz:

cat /sys/block/sda/queue/scheduler

Bir blok cihaz için zamanlayıcıyı değiştirmek için sysfs arayüzüne doğrudan yazabilirsiniz. Bu değişikliğin geçici olduğunu ve kalıcılık için udev kuralları aracılığıyla betiklenmesi gerektiğini unutmayın.

# NVMe sürücüsü sda için 'none' zamanlayıcısına geçiş yapın
echo "none" | sudo tee /sys/block/sda/queue/scheduler

Yüksek Eşzamanlılık İçin Ağ Yığını İnce Ayarı

Binlerce eşzamanlı bağlantıya hizmet verirken, varsayılan TCP yığını ayarları genellikle darboğaza dönüşür. İki kritik parametre net.core.somaxconn ve net.ipv4.tcp_tw_reuse şeklindedir.

somaxconn ayarı, maksimum soket bağlantı kuyruk uzunluğunu tanımlar. Uygulamanız Nginx veya Apache gibi bir web sunucusu ise ve düşük CPU kullanımına rağmen "Bağlantı Reddedildi" hataları görüyorsanız, yedek kuyruğunuz (backlog queue) muhtemelen doludur.

# Maksimum soket bağlantı kuyruğunu 65535'e artırın
sudo sysctl -w net.core.somaxconn=65535

Ayrıca, tcp_tw_reuse yeni gelen bağlantılar için TIME-WAIT durumundaki soketlerin yeniden kullanılmasına olanak tanır. Bu, API ağ geçitleri veya yük dengeleyiciler gibi çok sayıda dışa yönelik bağlantı kuran uygulamalar için hayati önem taşır.

# TCP TIME-WAIT yeniden kullanımını etkinleştirin
sudo sysctl -w net.ipv4.tcp_tw_reuse=1

İzleme ve İterasyon

Ölçüm yapmadan yapılan ince ayar tahmin yürütmekten farksızdır. vmstat, iostat ve pidstat gibi araçları kullanarak bir taban çizgi oluşturun. vmstat'te yüksek wa (G/Ç bekleme süresi), iostat'ta yüksek disk kullanımı veya pidstat'ta bağlam değiştirme artışlarına dikkat edin. Bir parametreyi tek tek ayarlayın, etkisini ölçün ve iterasyon yapın.

Sonuç

Linux performans ince ayarı, işletim sisteminin donanım kaynaklarını nasıl yönettiğine dair derin bir anlayış gerektiren ince bir disiplindir. Bellek, G/Ç ve ağlama ile ilgili çekirdek parametrelerini dikkatlice ayarlayarak altyapınızdan önemli performans kazançları elde edebilirsiniz. Ancak, bu optimizasyonların her zaman spesifik uygulamanızın iş yükü özellikleriyle uyumlu olması gerektiğini unutmayın. Sağlam bir izleme temeliyle başlayın, kademeli değişiklikler yapın ve ince ayar kararlarınızı veriye dayandırın.

Share: