Ubuntu Server ortamlarında, sunucunun performansını optimize etmek ve yüksek yük altında kararlılık sağlamak amacıyla process limitlerini yönetmek kritik öneme sahiptir.
Ubuntu Server ortamlarında, sunucunun performansını optimize etmek ve yüksek yük altında kararlılık sağlamak amacıyla process limitlerini yönetmek kritik öneme sahiptir. Özellikle ulimit -n komutu ile belirlenen açık dosya descriptor limitini artırmak, web sunucuları, veritabanı sistemleri veya çoklu bağlantı gerektiren uygulamalar için vazgeçilmezdir. Bu limit, bir process’in aynı anda açabileceği maksimum dosya sayısını (socket’ler dahil) tanımlar ve varsayılan değerler genellikle yetersiz kalabilir. Bu makalede, Ubuntu Server’da bu limiti güvenli ve etkili bir şekilde nasıl artıracağınızı adım adım ele alacağız. Kurumsal ortamlarda uygulanan en iyi pratikleri paylaşarak, hem geçici hem kalıcı çözümleri detaylandıracağız.
ulimit komutu, Linux sistemlerinde kullanıcı veya process bazında çeşitli kaynak limitlerini görüntülemek ve ayarlamak için kullanılır. ulimit -n parametresi özellikle açık dosya limitini (open files) temsil eder ve Ubuntu Server’ın varsayılan değeri genellikle 1024’tür. Bu değer, yoğun trafik alan sunucularda bağlantı reddine veya process çökmelerine yol açabilir. Örneğin, Nginx veya Apache gibi web sunucuları binlerce eşzamanlı bağlantı yönetirken bu limite takılabilir.
Sunucu yöneticileri için bu limitin önemi, sistem kaynaklarının verimli kullanımından geçer. Düşük limitler, OOM (Out of Memory) killer tetiklenmesine veya servislerin kesintiye uğramasına neden olur. Ubuntu 20.04 ve üzeri sürümlerde, systemd process manager’ı bu limitleri global olarak etkiler. Limit artırımını planlarken, sistem belleği, CPU kapasitesi ve disk I/O’sunu göz önünde bulundurmak şarttır. Aşırı artırım, kaynak tükenmesine yol açabilir; bu nedenle test ortamlarında deneme yapmanızı öneririz.
ulimit komutunun soft ve hard limitleri vardır: soft limit mevcut oturum için geçerliyken, hard limit üst sınırı belirler. ulimit -n ile soft limit görüntülenir, ulimit -Hn ile hard limit. Ubuntu’da bunları artırmak için root yetkisi gereklidir. Komut satırından ulimit -n 4096 yazarak geçici artış sağlanır, ancak bu sadece mevcut shell’i etkiler ve logout sonrası sıfırlanır. Kurumsal senaryolarda, bu komutun çıktısını düzenli izlemek için monitoring araçları entegre edilmelidir.
Limit artışı, fs.file-max gibi kernel parametrelerini de etkileyebilir. /proc/sys/fs/file-max dosyasını cat ile kontrol edin; bu global limite işaret eder. Düşük ulimit, veritabanı bağlantı havuzlarında (örneğin MySQL max_connections) sorun yaratır. Uygulamalar log’larında “Too many open files” hatası görülürse, hemen ulimit kontrolü yapılmalıdır. Bu bilgi, proaktif sistem yönetiminde temel oluşturur.
Ubuntu Server’da acil durumlarda process limitini hızlıca artırmak için terminal üzerinden işlem yapabilirsiniz. Öncelikle mevcut limiti kontrol edin: sudo ulimit -n. Ardından, root olarak ulimit -n 65536 gibi bir değerle ayarlayın. Bu değişiklik anında geçerlidir ve yeni process’ler için uygulanır. Ancak, mevcut process’ler etkilenmez; bu yüzden servisleri yeniden başlatmak gerekebilir.
Pratik bir örnek: Bir Nginx sunucusu aşırı yük altındaysa, sudo su – root komutuyla root shell’e geçin, ulimit -n 10240 ayarlayın ve nginx -s reload ile yenileyin. Bu yöntem, üretim ortamlarında downtime minimizasyonu için idealdir. Değişikliği doğrulamak için ulimit -n tekrar çalıştırın. Not: Bu geçici çözüm, sistem yeniden başlatıldığında kaybolur; kalıcı ayarlar için bir sonraki bölüme geçin.
Kalıcı limit artışı için /etc/security/limits.conf dosyasını düzenleyin. sudo nano /etc/security/limits.conf ile açın ve sonuna * soft nofile 65536 ve * hard nofile 65536 satırlarını ekleyin. Burada * tüm kullanıcıları, root soft nofile 65536 root’u temsil eder. Kaydedip çıkın, ardından sudo pam_limits.so ile PAM modülünü etkinleştirin (/etc/pam.d/common-session ve common-session-noninteractive dosyalarında kontrol edin).
systemd servisleri için özel ayar: Servis dosyasını override edin. Örneğin, Nginx için sudo systemctl edit nginx komutuyla [Service] altına LimitNOFILE=65536 ekleyin. Değişikliği sudo systemctl daemon-reload ve restart ile uygulayın. Bu, belirli servisleri hedefler ve global yükü azaltır. Ubuntu 22.04’te bu yöntem önerilir.
Dosya syntax’ı: domain type item value şeklindedir. Domain için username, @group veya * kullanın. Type soft/hard, item nofile için. Değişiklik sonrası logout/login veya reboot şarttır. Hatalı syntax, limitin uygulanmamasına yol açar; bu yüzden syntax kontrolü yapın. Kurumsal politikalarla uyumlu hale getirmek için bu dosyayı version control altına alın.
sudo systemctl edit [servis] ile drop-in unit oluşturun. [Service] section’ında LimitNOFILE=infinity bile yazılabilir, ancak 1048576 gibi gerçekçi değerler seçin. Uygulama sonrası journalctl -u [servis] ile log’ları inceleyin. Bu yaklaşım, container’lar (Docker) ile uyumludur ve izolasyon sağlar. Test için stress araçları (stress-ng –io 1000) kullanın.
Bu adımları uygulayarak Ubuntu Server’ınızı yüksek performanslı hale getirebilirsiniz. Her zaman yedek alın, değişiklikleri stage ortamında test edin ve monitoring ile takip edin. Düzenli bakım, kurumsal sunucularda kesintisiz hizmet sağlar.