Linux Kernel Tuning: Sysctl optimizasyonları

📅 1 Şubat 2026Emre Karabulut
⏱️ Yaklaşık 7 dakikalık okuma süresi

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.somaxconn

    Gelen 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_backlog

    Yeni 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_reuse

    TIME_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_timeout

    FIN_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_range

    Giden 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_watches

    Bir 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 sysctl ayarı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.conf dosyası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.

155f52c7e9c3ea8a325b44ff056acd50611fa5e706241e72fc0165362c08111b?s=64&d=mm&r=g
Emre Karabulut
📊 Bu yazı 11 kez okundu.