İşlem başına açık dosyaların maksimum limitleri hard limit ve soft limit değerleri ile sınırlandırılabilmektedir. Hard limit(/etc/system rlim_fd_max parametresi, process.max-file-descriptor ) sistem yöneticisi tarafından ayarlanır, herhangi bir kullanıcı tarafından değer azaltılabilir ama artırılamaz. Soft limit (/etc/system rlim_fd_cur parametresi, process.max-file-descriptor) ise herhangi bir kullanıcı tarafından ayarlanabilir, hard limit değerininin üzerine çıkabilir.
Solaris 10 ve 11’de Hard limit ve soft limit ayarları için çeşitli yöntemler mevcut olup bizde bu yöntemlerden bahsedeceğiz.
/etc/system dosyasında rlim_fd_max parametresi: /etc/system dosyası edit edilir, “rlim_fd_max = 65536” değeri girilir 65536 varsayılan değerdir. Ayrıca farklı bir değer girilebilir. İşletim sistemini yeniden başlatmanız gerekmektedir.
Kaynak kontrolü process.max-file-descriptor: Sistemi kapatmadan ayar yapabildiğimiz yöntemdir. İşlemler yapılan değişiklikten etkilenmez.
Hard limit değerini varsayılan 65536 değerinden 4096 değerine değiştirmek istersek aşağıdaki komutu girmeliyiz.
# projmod -s -K "process.max-file-descriptor=(priv,4096,deny)" PRJ
Soft limit değerini varsayılan 256’dan 1024 değerine değiştirmek istersek aşağıdaki komutu girmeliyiz.
# projmod -s -K "process.max-file-descriptor=(basic,1024,deny) PRJ
limit/ulimit komutları: limit ve ulimit komutları ile de bu ayarları yapabilirsiniz.
Soft limit değerini default 128’den 512 csh’da artırmakiçin aşağıdaki komutu giriyoruz.
# limit descriptors 512
Soft limit değerini default 128’den 512 ksh’ veya sh’da artırmakiçin aşağıdaki komutu giriyoruz.
# ulimit -Sn 512
Hard limit değerini default 65536’dan 4096’ya csh’da azaltmak çin aşağıdaki komutu giriyoruz.
# limit -h descriptors 4096
Hard limit değerini default 65536’dan 4096’ya ksh veya sh’da azaltmakiçin aşağıdaki komutu giriyoruz.
# ulimit -Hn 4096
plimit komutu: Önceden çalışan bir işlemin, İşlem başına açık dosyaların maksimum limitlerini plimit komtu ile değiştirebilirsiniz. Örneğin 23159 numaralı işlemin soft limitini 2048 hard limiti ise 4096 yapmak istersek aşağıdaki komutu girmeniz yeterli ooacaktır.
# plimit -n 2048,4096 23159
Ayrıca aşağıdaki komutları girerek çalışan bir işlemin limit değerlerini kontrol edebilirsiniz.
# prctl -n process.max-file-descriptor 23159 process: 23159: sleep 1200 NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT process.max-file-descriptor basic 256 - deny 23159 privileged 65.5K - deny - system 2.15G max deny - # plimit 23159 23159: sleep 1200 resource current maximum time(seconds) unlimited unlimited file(blocks) unlimited unlimited data(kbytes) unlimited unlimited stack(kbytes) 10240 unlimited coredump(blocks) unlimited unlimited nofiles(descriptors) 256 65536 vmemory(kbytes) unlimited unlimited # pfiles 23159 23159: sleep 1200 Current rlimit: 256 file descriptors 0: S_IFCHR mode:0620 dev:542,0 ino:500877638 uid:60004 gid:7 rdev:133,1 O_RDWR /dev/pts/1 offset:38001 1: S_IFCHR mode:0620 dev:542,0 ino:500877638 uid:60004 gid:7 rdev:133,1 O_RDWR /dev/pts/1 offset:38001 2: S_IFCHR mode:0620 dev:542,0 ino:500877638 uid:60004 gid:7 rdev:133,1 O_RDWR /dev/pts/1 offset:38001
Açık dosyalar (open files) ve dosya sistemi hakkında teorik bilgiler için tıklayınız.
Kaynak: “How To Set The Limit For The Maximum Number Of Open Files Per Process In Solaris 10 And Solaris 11 (Doc ID 1408563.1)” başlıklı Oracle belgesi