Anda ingin melihat /proc/sys/fs/file-max sebagai gantinya
Dari linux/Documentation/sysctl/fs.txt terbaru:
file-max &file-nr:
Kernel mengalokasikan pegangan file secara dinamis, tetapi belum membebaskannya lagi.
Nilai dalam file-max menunjukkan jumlah maksimum penanganan file yang akan dialokasikan oleh kernel Linux. Saat Anda mendapatkan banyak pesan kesalahan tentang kehabisan pegangan file, Anda mungkin ingin meningkatkan batas ini.
Secara historis, tiga nilai dalam file-nr menunjukkan jumlah pegangan file yang dialokasikan, jumlah pegangan file yang dialokasikan tetapi tidak digunakan, dan jumlah maksimum pegangan file. Linux 2.6 selalu melaporkan 0 sebagai jumlah pegangan file gratis -- ini bukan kesalahan, ini hanya berarti bahwa jumlah pegangan file yang dialokasikan sama persis dengan jumlah pegangan file yang digunakan.
Upaya untuk mengalokasikan lebih banyak deskriptor file daripada file-max dilaporkan dengan printk, cari "VFS:file-max limitreached".
EDIT:kesalahan yang mendasarinya mungkin bukan sistem yang kehabisan deskriptor file global, tetapi hanya proses Anda. Sepertinya masalahnya adalah batas ukuran maksimum pilihan.
Sepertinya Anda tidak mencapai batas deskriptor file sistem. Lihat jawaban ini.
Mungkin proses server Anda menggunakan select
dan dengan demikian terbatas pada 1024 deskriptor? Jika Anda beralih ke mekanisme lain, mis. poll
Anda tidak akan dibatasi hingga 1024 deskriptor lagi.
select()
berfungsi dengan fd_set
s
Ini dari dokumentasi POSIX dari select.h:
Berikut ini harus didefinisikan sebagai makro:
FD_SETSIZE
Maximum number of file descriptors in an fd_set structure.
Coba temukan atau hasilkan FD_SETSIZE
di sistem Anda.
Jika Anda menemukan FD_SETSIZE terlalu rendah untuk Anda, saya lebih suka mencoba menjauh dari select
daripada mencoba meningkatkan FD_SETSIZE
yang biasanya lebih sulit.