Linux Kernel Tuning: Sysctl Optimizasyonları ile Performans Sanatı
Giriş
Bir sistem yöneticisi olarak, işletim sisteminin kalbine inmek ve performans darboğazlarını ortadan kaldırmak en büyük tutkularımızdan biridir. Linux kernel’i, esnekliği ve yapılandırılabilirliği sayesinde bize bu derinlemesine müdahaleyi mümkün kılar. Bu yazıda, Linux çekirdeğinin çalışma zamanı parametrelerini yönetmek için kullanılan temel araç olan sysctl üzerinde duracak, sistem performansını ve kararlılığını artırmak için yapabileceğimiz çeşitli optimizasyonları teknik detaylarıyla inceleyeceğiz.
sysctl, /proc/sys/ dizininde bulunan ve çekirdek davranışını kontrol eden çeşitli ayarları dinamik olarak değiştirmenizi sağlayan bir arayüzdür. Bu parametreler, ağ yığınından bellek yönetimine, dosya sisteminden güvenlik ayarlarına kadar geniş bir yelpazeyi kapsar. Doğru yapılandırıldığında, bu parametreler web sunucularının, veritabanı sistemlerinin veya yüksek I/O yüküne sahip uygulamaların performansını dramatik bir şekilde iyileştirebilir.
Sysctl Parametreleri Nasıl Yönetilir?
Mevcut Değerleri Görüntüleme
Tüm sysctl parametrelerini ve mevcut değerlerini görüntülemek için aşağıdaki komutu kullanabilirsiniz:
sysctl -a
Belirli bir parametrenin değerini öğrenmek isterseniz, doğrudan sysctl ile sorgulayabilir veya /proc/sys/ yolunu kullanabilirsiniz:
sysctl net.ipv4.ip_local_port_range
cat /proc/sys/net/ipv4/ip_local_port_range
Geçici Değer Ayarlama
Bir parametrenin değerini kalıcı olmayan bir şekilde, yani sistem yeniden başlatılana kadar geçerli olacak şekilde değiştirmek için -w (write) anahtarını kullanırız:
sysctl -w net.ipv4.tcp_max_syn_backlog=4096
Bu değişiklikler, sistem yeniden başlatıldığında sıfırlanır.
Kalıcı Değer Ayarlama
Kernel parametrelerini kalıcı hale getirmek için /etc/sysctl.conf dosyasını veya /etc/sysctl.d/ dizini altındaki .conf uzantılı dosyaları kullanırız. Bu dosyaların içine, değiştirmek istediğiniz parametreleri key = value formatında eklersiniz:
# /etc/sysctl.conf dosyasına örnek girdi
net.ipv4.tcp_max_syn_backlog = 4096
vm.swappiness = 10
Değişiklikleri kaydettikten sonra, bu yeni değerlerin etkinleşmesi için aşağıdaki komutlardan birini çalıştırmanız gerekir:
sysctl -p
sysctl --system
Bu komutlar, yapılandırma dosyalarındaki tüm ayarları okur ve uygular.
Kilit Optimizasyon Alanları ve Örnek Parametreler
Ağ Performansı (net.*)
Özellikle yüksek trafikli web sunucuları, yük dengeleyiciler veya veritabanı sunucuları için ağ ayarları kritik öneme sahiptir.
Yüksek Bağlantılı Sistemler İçin
-
net.core.somaxconnGelen bağlantıları kabul etmek için bekleyen soketlerin kuyruğunun maksimum uzunluğunu belirler. Yüksek trafikli sunucularda varsayılan değer genellikle düşüktür ve “Connection refused” hatalarına yol açabilir.
net.core.somaxconn = 65535 -
net.ipv4.tcp_max_syn_backlogYeni bağlantı kurma (SYN) istekleri için bekleyen kuyruğun maksimum boyutunu belirler. SYN-Flood saldırılarına karşı bir koruma sağlamanın yanı sıra, yoğun anlarda bağlantı düşmelerini engellemek için artırılabilir.
net.ipv4.tcp_max_syn_backlog = 8192 -
net.ipv4.tcp_tw_reuseTIME_WAIT durumundaki soketlerin yeni bağlantılar için tekrar kullanılmasına izin verir. Özellikle çok sayıda kısa ömürlü bağlantı kuran uygulamalar için faydalıdır. Ancak, NAT ortamlarında dikkatli kullanılmalıdır.
net.ipv4.tcp_tw_reuse = 1 -
net.ipv4.tcp_fin_timeoutFIN_WAIT2 durumundaki soketlerin bekleme süresini saniye cinsinden ayarlar. Düşük değerler, kapatılmamış bağlantıların erken serbest bırakılmasına yardımcı olabilir, ancak ağ gecikmelerini de göz önünde bulundurmak gerekir.
net.ipv4.tcp_fin_timeout = 30 -
net.ipv4.ip_local_port_rangeGiden bağlantılar için kullanılacak yerel (kaynak) port aralığını tanımlar. Yüksek eş zamanlı giden bağlantılar yapan sistemler için bu aralık genişletilebilir.
net.ipv4.ip_local_port_range = 1024 65535
Bellek Yönetimi (vm.*)
Bellek parametreleri, sistemin genel yanıt süresi ve bellek kullanımı üzerinde doğrudan etkiye sahiptir.
Genel Sistem Yanıt Hızı İçin
-
vm.swappinessÇekirdeğin ne kadar hevesli bir şekilde swap alanını kullanacağını belirler (0-100 arası). Düşük değerler (örneğin 10), çekirdeğin mümkün olduğunca uzun süre fiziksel RAM’i kullanmasını teşvik eder. Yüksek değerler, swap kullanımını artırır. Genellikle sunucularda 10-20 arası bir değer önerilir, veritabanı sunucularında ise 0 olabilir.
vm.swappiness = 10 -
vm.vfs_cache_pressureÇekirdeğin inode ve dentry önbelleklerini ne kadar hızlı geri kazanacağını kontrol eder. Yüksek değerler önbellekleri daha hızlı temizlerken, düşük değerler (örn: 50) dosya sistemi önbelleklerinin daha uzun süre bellekte kalmasını sağlar, bu da dosya sistemi yoğun uygulamalar için faydalı olabilir.
vm.vfs_cache_pressure = 100
Dosya Sistemi (fs.*)
Özellikle büyük dosya sayılarıyla çalışan veya inotify izleyicisi kullanan uygulamalar için önemlidir.
Uygulama Özel İhtiyaçları İçin
-
fs.inotify.max_user_watchesBir kullanıcı tarafından oluşturulabilecek maksimum inotify izleyici sayısını belirler. Özellikle IDE’ler (VS Code), sanallaştırma yazılımları veya dosya senkronizasyon servisleri gibi çok sayıda dosya izlemesi yapan uygulamalar bu sınıra takılabilir.
fs.inotify.max_user_watches = 524288
Çekirdek Davranışları (kernel.*)
Sistemin genel güvenliği ve stabilite ayarları bu kategoriye girer.
Güvenlik ve Stabilite İçin
-
kernel.panicÇekirdek paniği durumunda sistemin yeniden başlatılması için beklenecek saniye sayısını belirler. Birçok üretim ortamında, panik durumunda sistemin kendini hızla yeniden başlatması tercih edilir (örn: 10 saniye), böylece uzun süreli kesintiler önlenir.
kernel.panic = 10
En İyi Uygulamalar ve Dikkat Edilmesi Gerekenler
- Test Edin! Herhangi bir
sysctlayarını üretim ortamına uygulamadan önce bir test ortamında kapsamlı bir şekilde test edin. - Anlayın! Bir parametreyi değiştirmeden önce ne işe yaradığını ve sistem üzerindeki olası etkilerini tam olarak anladığınızdan emin olun. Körlemesine kopyala-yapıştır yapmayın.
- Yedekleyin!
/etc/sysctl.confdosyasını değiştirmeden önce mutlaka bir yedeğini alın. - Küçük Başlayın! Bir seferde tek bir parametre veya ilişkili birkaç parametreyi değiştirerek etkilerini gözlemleyin. Birden fazla büyük değişiklik yapmak sorun gidermeyi zorlaştırır.
- Dokümante Edin! Yaptığınız değişiklikleri ve bunların nedenlerini not alın. Bu, gelecekteki sorun giderme veya sistem denetimleri için çok faydalı olacaktır.
- Körlemesine Kopyalamayın! İnternette bulduğunuz “en iyi ayarları” doğrudan sisteminize uygulamayın. Her sistemin ve iş yükünün ihtiyaçları farklıdır.
Sonuç
Linux kernel’ini sysctl aracılığıyla ayarlamak, bir sistem yöneticisinin araç çantasındaki en güçlü silahlardan biridir. Doğru uygulandığında, bu optimizasyonlar sisteminizin performansını, kararlılığını ve yanıt hızını önemli ölçüde artırabilir. Ancak unutmayın, büyük güç büyük sorumluluk getirir. Her zaman dikkatli, bilinçli ve metodik bir yaklaşımla hareket edin. Kernel’in derinliklerine inmek, sistemlerinizi daha verimli hale getirmenin ve kullanıcılarınıza kesintisiz bir deneyim sunmanın anahtarıdır.
