Linux Sistemlerinde tuned ile Dinamik Performans Optimizasyonu

 · 

Linux Sistemlerinde tuned ile Dinamik Performans Optimizasyonu

Linux Sistemlerinde tuned ile Dinamik Performans Optimizasyonu

Linux işletim sistemlerinde performans, genellikle statik konfigürasyonlarla yönetilmeye çalışılır. Ancak, iş yükleri dinamiktir ve sistemin sürekli olarak bu değişen taleplere adapte olması gerekir. İşte bu noktada tuned servisi devreye girer. tuned, işletim sisteminin çeşitli bileşenlerini (CPU, disk I/O, ağ, bellek gibi) izleyerek ve önceden tanımlanmış veya özel olarak oluşturulmuş profillere göre optimize ederek sistem performansını dinamik olarak ayarlayan bir deamondur.

tuned Nasıl Çalışır?

tuned'ın temel mekanizması profillere dayanır. Her profil, belirli bir iş yükü veya donanım türü için optimize edilmiş bir dizi ayar içerir. Bu ayarlar, sysctl parametrelerinden disk I/O zamanlayıcılarına, CPU frekans ölçeklendirme politikalarından ağ arayüzü ayarlarına kadar geniş bir yelpazeyi kapsar. tuned deamonu, sistemin mevcut durumunu analiz eder ve aktif profilde tanımlanan optimizasyonları uygular.

Kullanılabilir profilleri listelemek için:

tuned-adm list

Çıktı, sisteminizde yüklü olan ve kullanıma hazır profilleri gösterir. Örneğin:

Available profiles:- balanced- desktop- latency-performance- network-latency- network-throughput- powersave- throughput-performance (current)- virtual-guest- virtual-hostCurrent active profile: throughput-performance

Bir profili etkinleştirmek için:

sudo tuned-adm profile [profil_adı]

Örneğin, genel amaçlı bir sunucu için throughput-performance profilini etkinleştirmek yaygındır:

sudo tuned-adm profile throughput-performance

Özel tuned Profilleri Oluşturma: Gerçek Dünya Senaryoları

tuned'ın gücü, yalnızca ön tanımlı profilleri kullanmakla kalmayıp, kendi özel profillerinizi oluşturabilmenizden gelir. Bu, belirli bir uygulama veya servis için hassas ayarlar yapmanızı sağlar.

Senaryo 1: Yüksek Performanslı PostgreSQL Veritabanı Sunucusu Optimizasyonu

Bir PostgreSQL veritabanı sunucusu, yoğun disk I/O ve bellek kullanımıyla karakterizedir. Bu durumda, standart profiller yerine özel bir profil oluşturmak, veritabanı işlemlerinin latensini düşürmek ve throughput'u artırmak için kritik öneme sahiptir.

İlk olarak, /etc/tuned/ dizini altında yeni bir profil dizini oluşturun. Örneğin, postgresql-db:

sudo mkdir /etc/tuned/postgresql-dbsudo vi /etc/tuned/postgresql-db/tuned.conf

tuned.conf dosyasına aşağıdaki gibi parametreler ekleyin:

[main]summary=Optimize for PostgreSQL Database Server workloads[cpu]governor=performancemin_perf_pct=100[disk]# NVMe diskler için I/O zamanlayıcıyı none veya noop olarak ayarlamak genellikle en iyisidir.# SATA SSD/HDD'ler için deadline veya mq-deadline tercih edilebilir.# Hedef diskin UUID'si veya yolu ile belirtilebilir.# Örneğin, /dev/nvme0n1 için:# devices=nvme0n1# scheduler=none[sysctl]# Bellek kullanımını agresif swap'ten kaçınarak optimize etvm.swappiness=1# VFS önbelleğini daha uzun süre tutvm.vfs_cache_pressure=50# Veritabanı yazma performansını artırmak için dirty_ratio'yu düşürvm.dirty_ratio=10vm.dirty_background_ratio=5# TCP ağ ayarları (özellikle sunucu-istemci bağlantıları için)net.core.somaxconn=65535net.ipv4.tcp_fin_timeout=15net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_max_syn_backlog=65535net.ipv4.tcp_keepalive_time=300net.ipv4.tcp_keepalive_probes=5net.ipv4.tcp_keepalive_intvl=15[kernel]# Kernel scheduler latensini düşürerek daha duyarlı bir sistem sağlarsched_latency_ns=1000000sched_min_granularity_ns=1000000sched_wakeup_granularity_ns=1500000

Bu profil, CPU'yu her zaman en yüksek performansta tutar, bellek yönetimi için swap kullanımını minimize eder ve disk I/O ile ağ ayarlarını veritabanı iş yüklerine uygun hale getirir. Özellikle vm.swappiness=1 ayarı, sistemin RAM dolduğunda bile mümkün olduğunca diske yazmaktan kaçınmasını sağlar ki bu, veritabanları için hayati öneme sahiptir.

Profili etkinleştirin:

sudo tuned-adm profile postgresql-db

Senaryo 2: Yüksek Trafikli Nginx Web Sunucusu Optimizasyonu

Bir web sunucusu, genellikle çok sayıda eşzamanlı bağlantıyı yönetmek zorundadır. Bu senaryoda, ağ yığınının ve dosya tanımlayıcı (file descriptor) limitlerinin optimize edilmesi gereklidir.

Yeni bir profil dizini oluşturun: /etc/tuned/nginx-webserver

sudo mkdir /etc/tuned/nginx-webserversudo vi /etc/tuned/nginx-webserver/tuned.conf

tuned.conf dosyasına eklenecekler:

[main]summary=Optimize for High Traffic Nginx Web Server workloads[cpu]governor=performancemin_perf_pct=100[sysctl]# Maksimum açık dosya tanımlayıcı sayısını artırfs.file-max=1000000# TCP SYN kuyruğu boyutunu artırnet.ipv4.tcp_max_syn_backlog=20480# Dinleme soketleri için backlog boyutunu artırnet.core.somaxconn=32768# Bağlantıların TIME_WAIT durumunda bekleme süresini azaltnet.ipv4.tcp_fin_timeout=15# TIME_WAIT durumundaki soketleri yeniden kullanmaya izin vernet.ipv4.tcp_tw_reuse=1# TCP FIN paketleri için hızlı kapanmanet.ipv4.tcp_tw_recycle=0 # Bu ayar NAT arkasındaki istemcilerle sorun yaratabilir, dikkatli kullanılmalı. Genellikle 0 önerilir.# Bağlantı kopukluğunu algılamak için keepalive ayarlarınet.ipv4.tcp_keepalive_time=600net.ipv4.tcp_keepalive_probes=5net.ipv4.tcp_keepalive_intvl=30

Bu profil, Nginx'in binlerce eşzamanlı bağlantıyı daha verimli bir şekilde işlemesini sağlamak için sistem genelindeki dosya tanımlayıcı limitlerini ve TCP/IP yığını ayarlarını optimize eder. Özellikle net.core.somaxconn ve fs.file-max gibi parametreler, yüksek trafikli web sunucuları için kritik öneme sahiptir.

Profili etkinleştirin:

sudo tuned-adm profile nginx-webserver

Aktif Profili ve Optimizasyonları Doğrulama

Bir profili etkinleştirdikten sonra, tuned-adm active komutu ile hangi profilin aktif olduğunu görebilirsiniz:

tuned-adm active

Daha detaylı bilgi için tuned-adm verify veya tuned-adm list_verbose komutlarını kullanabilirsiniz. verify komutu, aktif profilin tüm ayarlarının başarıyla uygulanıp uygulanmadığını kontrol eder.

tuned-adm verify

Tüm ayarların uygulanıp uygulanmadığını ve beklenen değerlere sahip olup olmadığını bu komut ile kontrol etmek, optimizasyonun doğru çalıştığından emin olmak için önemlidir.

Sonuç ve Dikkat Edilmesi Gerekenler

tuned, Linux sistemlerinde performans optimizasyonu için güçlü ve esnek bir araçtır. Ancak, her optimizasyon gibi, dikkatli bir yaklaşımla ele alınmalıdır. Özel profiller oluştururken:

  • Değişiklikleri her zaman test ortamında doğrulayın.
  • Değişikliklerin etkilerini izlemek için performans izleme araçları (atop, sar, Prometheus/Grafana) kullanın.
  • Geriye dönük uyumluluk ve olası yan etkileri göz önünde bulundurun.
  • Temel (baseline) performans ölçümlerini alın ve optimizasyon sonrası karşılaştırın.

Doğru kullanıldığında, tuned, sunucularınızın belirli iş yüklerine göre otomatik olarak ayarlanmasını sağlayarak önemli performans kazançları elde etmenize yardımcı olabilir. Bu, hem kaynak verimliliğini artırır hem de uygulamanızın son kullanıcı deneyimini iyileştirir.

← Blog Listesine Dön