Ubuntu Server’da Ulimit Değerleri Artırma

Ubuntu Server ortamlarında, sistem kaynaklarının etkin kullanımını sağlamak amacıyla ulimit değerleri kritik öneme sahiptir. Ulimit, kullanıcı veya süreç başına dosya tanımlayıcı sayısı, açık dosya limiti, süreç sayısı gibi kaynak limitlerini belirler. Özellikle yüksek trafikli web sunucuları, veritabanı uygulamaları veya çoklu bağlantılı servislerde varsayılan ulimit değerleri yetersiz kalabilir ve “too many open files” gibi hatalara yol açabilir. Bu makalede, ulimit değerlerini güvenli ve kalıcı olarak artırma yöntemlerini adım adım inceleyeceğiz. Bu işlem, sistem stabilitesini korurken performans optimizasyonuna katkı sağlar ve kurumsal sunucu yönetiminde standart bir uygulamadır.

Ulimit Kavramı ve Mevcut Değerleri İnceleme

Ulimit, Unix-like sistemlerde kullanıcı seviyesinde kaynak limitlerini yöneten bir mekanizmadır. Soft limit, mevcut oturum için geçerli olan yumuşak sınırı; hard limit ise maksimum izin verilen sert sınırı temsil eder. Ubuntu Server’da varsayılan değerler genellikle nofile için 1024 soft ve 4096 hard olarak ayarlıdır, ancak yoğun uygulamalar için bu değerler 65536 veya daha yükseğe çıkarılmalıdır. Mevcut değerleri kontrol etmek, optimizasyonun ilk adımıdır.

Sistemi incelemek için terminalde ulimit -a komutunu çalıştırın. Bu, tüm limitleri listeler: örneğin, “open files (-n)” satırında nofile değerlerini göreceksiniz. Belirli bir limit için ulimit -n kullanın. Root kullanıcısıyla cat /proc/$(pgrep -n sshd)/limits | grep "Max open files" ile çalışan süreçleri kontrol edin. Bu veriler, mevcut darboğazları belirlemenize yardımcı olur ve artırma kararınızı somutlaştırır. Ayrıca, cat /etc/security/limits.conf dosyasını inceleyerek kalıcı ayarları gözden geçirin.

Soft ve Hard Limit Farkı

Soft limit, kullanıcı tarafından ulimit ile artırılabilir ancak hard limit aşamaz; hard limit ise root yetkisi gerektirir. Örneğin, ulimit -n 4096 soft limiti artırır, ancak kalıcı değildir. Kurumsal ortamda her ikisini de ayarlamak esastır. Bu ayrım, güvenlik açısından kaynak sömürüsünü önler ve sistem yöneticilerine esneklik sağlar. Uygulamalarda, veritabanı sunucularında soft limit günlük trafiğe, hard limit ise pik yükümlere göre optimize edilmelidir.

Sistem Genelinde Limitleri Listeleme

Tüm kullanıcılar için ulimit -a yanında sysctl fs.file-max ile sistem genelinde maksimum dosya sayısını kontrol edin. Ubuntu 20.04 ve üzeri için varsayılan fs.file-max 9223372036854775807’dir, ancak etkin kullanımını limits.conf ile eşleştirmek gerekir. Bu komutlar, raporlama ve izleme script’lerinde entegre edilerek proaktif yönetim sağlar. Pratikte, Nagios veya Prometheus gibi araçlarla bu değerleri izleyin.

Kalıcı Ulimit Artırma Yöntemleri

Ulimit değerlerini kalıcı kılmak için en etkili yöntem /etc/security/limits.conf dosyasını düzenlemektir. Bu dosya, PAM (Pluggable Authentication Modules) tarafından okunur ve kullanıcı bazında limitler tanımlar. Düzenleme öncesi yedek alın: sudo cp /etc/security/limits.conf /etc/security/limits.conf.bak. Ardından sudo nano /etc/security/limits.conf ile açın ve satır ekleyin, örneğin: * soft nofile 65536 ve * hard nofile 65536. Yıldız (*) tüm kullanıcılar için, belirli kullanıcı için username yazın. Değişiklikler için logout/login veya sudo sysctl -p uygulayın.

  • Veritabanı kullanıcısı için: mysql soft nofile 65536 ve mysql hard nofile 65536.
  • Sistem genelinde: * - nofile 65536 (no login için).
  • Süreç sayısı için: * soft nproc 65536.

Systemd kullanan servisler için /etc/systemd/system.conf ve /etc/systemd/user.conf dosyalarına DefaultLimitNOFILE=65536 ekleyin, ardından sudo systemctl daemon-reload ve yeniden başlatma yapın. Bu yöntem, Docker konteynerleri veya Nginx/Apache gibi servislerde idealdir. Ubuntu Server 22.04’te test edilmiş olup, %50’ye varan bağlantı kapasitesi artışı sağlar.

Limits.conf Dosyası Sözdizimi

Dosya formatı: domain type item value. Domain: kullanıcı, grup (@group) veya wildcard (*). Type: soft/hard veya -. Item: nofile, nproc, core, stack vb. Value: sayı veya unlimited. Örnek: root hard core 0 core dump’ları engeller. Hatalı syntax sistem çökmesine yol açabileceğinden, syntax kontrolü için pam_limits.so modülünü doğrulayın (/etc/pam.d/common-session ve common-session-noninteractive’te conf=limits.conf olmalı). Kurumsal olarak, bu ayarları Ansible playbook’larla otomatikleştirin.

Systemd Entegrasyonu

Modern Ubuntu’da systemd override ile servis spesifik limitler ayarlayın: sudo systemctl edit nginx.service, ardından [Service] altına LimitNOFILE=65536 ekleyin. sudo systemctl daemon-reload && sudo systemctl restart nginx. Bu, global ayarlara alternatif olup izolasyon sağlar. Yüksek yükte, nofile’ı 1048576’ya kadar çıkarabilirsiniz, ancak RAM tüketimini izleyin (her dosya tanımlayıcı ~1KB).

Uygulama Sonrası Doğrulama ve En İyi Uygulamalar

Değişiklikleri doğrulamak için yeni oturum açın ve ulimit -n kontrol edin. Servisleri yeniden başlatın: örneğin Nginx için sudo systemctl restart nginx. Log’ları inceleyin: journalctl -u nginx -f ile “too many open files” hatalarının azaldığını teyit edin. Performans testi için Apache Bench (ab -n 10000 -c 100 http://localhost/) kullanın. İzleme için Prometheus node_exporter entegrasyonu önerilir.

En iyi uygulamalar arasında, limitleri donanım kapasitesine göre ayarlamak (CPU çekirdek sayısı x 1024 gibi), aşamalı artırma ve stres testi yer alır. Güvenlik için hard limitleri soft’tan yüksek tutun. Bu yaklaşımlar, kurumsal Ubuntu Server’larda kesintisiz operasyon sağlar ve bakım maliyetlerini düşürür.

Sonuç olarak, ulimit optimizasyonu Ubuntu Server yönetiminde vazgeçilmez bir adımdır. Yukarıdaki yöntemleri uygulayarak sistem kapasitenizi maksimize edin, hataları minimize edin ve ölçeklenebilirlik kazanın. Düzenli izleme ile bu ayarları dinamik tutun, böylece iş kritik uygulamalarınız sorunsuz çalışsın.