Apakah ada batasan (teknis atau praktis) untuk seberapa besar Anda dapat mengkonfigurasi jumlah maksimum file terbuka di Linux? Apakah ada beberapa efek buruk jika Anda mengonfigurasinya ke jumlah yang sangat besar (katakanlah 1-100M)?
Saya pikir penggunaan server di sini, bukan sistem embedded. Program yang menggunakan sejumlah besar file terbuka tentu saja dapat memakan memori dan menjadi lambat, tetapi saya tertarik pada efek yang merugikan jika batasnya dikonfigurasi jauh lebih besar dari yang diperlukan (mis. Memori yang dikonsumsi hanya dengan konfigurasi).
linux
files
limit
open-files
Sampo
sumber
sumber
Jawaban:
Saya menduga alasan utama untuk batasan ini adalah untuk menghindari konsumsi memori berlebih (setiap deskriptor file terbuka menggunakan memori kernel). Ini juga berfungsi sebagai perlindungan terhadap aplikasi buggy yang membocorkan deskriptor file dan menghabiskan sumber daya sistem.
Tetapi mengingat betapa banyak kepalang RAM sistem modern dibandingkan dengan sistem 10 tahun yang lalu, saya pikir standar saat ini cukup rendah.
Pada tahun 2011 batas keras default untuk deskriptor file di Linux meningkat dari 1024 menjadi 4096 .
Beberapa perangkat lunak (misalnya MongoDB) menggunakan lebih banyak deskriptor file daripada batas default. Orang-orang MongoDB merekomendasikan menaikkan batas ini menjadi 64.000 . Saya telah menggunakan
rlimit_nofile
300.000 untuk aplikasi tertentu.Selama Anda mempertahankan batas lunak di default (1024), mungkin cukup aman untuk meningkatkan batas keras. Program harus memanggil
setrlimit()
untuk meningkatkan batas mereka di atas batas lunak, dan masih dibatasi oleh batas keras.Lihat juga beberapa pertanyaan terkait:
sumber
Dampaknya biasanya tidak dapat diamati, tetapi modul IO kernel harus mengurus semua deskriptor file yang terbuka dan mereka juga dapat berdampak pada efisiensi cache.
Batas tersebut memiliki keuntungan melindungi pengguna dari kesalahan mereka sendiri (atau pihak ketiga). Misalnya, jika Anda menjalankan sebuah program kecil atau skrip yang bercabang tanpa batas, program itu 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 batasan tersebut, Anda harus menghindarinya dan tidur lebih nyenyak.
sumber
Secara teknis terbatas pada nilai maksimum unsigned long (C Lang) yaitu 4.294.967.295
Referensi:
fs.h
filesumber
Saya pikir kekhawatiran Anda dapat dimengerti tetapi kemungkinan besar Linux tidak akan mengkonsumsi banyak memori untuk dikonfigurasi (tetapi tidak menggunakan deskriptor file) :)
Saya tidak dapat mengingat masalah seperti itu dalam karier profesional saya selama 10 tahun terakhir.
Salam.
sumber
Tenang, tetapi ini akan membantu orang lain untuk mendapatkan jawaban untuk pertanyaan ini. Batas praktis untuk jumlah file yang terbuka di linux juga dapat dihitung menggunakan jumlah maksimum deskriptor file yang dapat dibuka oleh suatu proses.
Saya telah melihat batasan diubah dari sistem ke sistem. Dari halaman manual getlimit Anda dapat melihat yang
RLIMIT_NOFILE-1
menentukan batas secara internal.Untuk memeriksa nilai RLIMIT_NOFILE Anda dapat menggunakan pernyataan di bawah ini untuk mendapatkan tuple
python -c "import resource; print(resource.getrlimit(resource.RLIMIT_NOFILE))"
Tuple mengembalikan hasil sebagai (Soflimit, hardlimit). Bagi saya berjalan di beberapa sistem, hasilnya seperti di bawah ini
Catatan: 9223372036854775807 angka ini berarti tak terhingga. Anda akan selalu mencapai batas sumber daya lainnya sebelum Anda mencapai ini. Jika Anda telah memodifikasi hardlimit pada sistem di luar apa itu, Anda harus memodifikasi params kernel.
sumber