Saya menduga alasan utama batasan tersebut adalah untuk menghindari konsumsi memori berlebih (setiap deskriptor file terbuka menggunakan memori kernel). Ini juga berfungsi sebagai perlindungan terhadap aplikasi bermasalah yang membocorkan deskriptor file dan menghabiskan sumber daya sistem.
Tetapi mengingat betapa tidak masuk akalnya RAM sistem modern dibandingkan dengan sistem 10 tahun yang lalu, menurut saya default saat ini cukup rendah.
Pada tahun 2011, batas keras default untuk deskriptor file di Linux ditingkatkan dari 1024 menjadi 4096.
Beberapa perangkat lunak (mis. MongoDB) menggunakan lebih banyak deskriptor file daripada batas default. Orang-orang MongoDB merekomendasikan untuk menaikkan batas ini menjadi 64.000. Saya telah menggunakan rlimit_nofile
sebesar 300.000 untuk aplikasi tertentu.
Selama Anda mempertahankan batas lunak pada default (1024), mungkin cukup aman untuk meningkatkan batas keras. Program harus memanggil setrlimit()
untuk menaikkan batas mereka di atas batas lunak, dan masih dibatasi oleh batas keras.
Lihat juga beberapa pertanyaan terkait:
- https://serverfault.com/questions/356962/where-are-the-default-ulimit-values-set-linux-centos
- https://serverfault.com/questions/773609/how-do-ulimit-settings-impact-linux
Dampaknya biasanya tidak dapat diamati, tetapi modul IO kernel harus menangani semua deskriptor file terbuka tersebut dan mereka juga dapat berdampak pada efisiensi cache.
Batasan tersebut memiliki keuntungan melindungi pengguna dari kesalahan mereka sendiri (atau pihak ketiga). Misalnya, jika Anda menjalankan program atau skrip kecil yang bercabang tanpa batas, pada akhirnya akan memblokir salah satu dari ulimit
s dan karenanya mencegah pembekuan komputer yang lebih intens (mungkin tidak dapat dipulihkan).
Kecuali Anda memiliki alasan yang tepat untuk meningkatkan salah satu dari batas tersebut, Anda harus menghindarinya dan tidur lebih nyenyak.
Secara teknis terbatas pada nilai maksimum unsigned long (C Lang) yaitu 4.294.967.295
Referensi :fs.h
berkas
/* And dynamically-tunable limits and defaults: */
struct files_stat_struct {
unsigned long nr_files; /* read only */
unsigned long nr_free_files; /* read only */
unsigned long max_files; /* tunable THIS IS OUR VALUE */
};