Kemungkinan lain adalah terlalu banyak utas. Kami baru saja menemukan pesan kesalahan ini saat menjalankan test harness terhadap aplikasi yang menggunakan kumpulan utas. Kami menggunakan
watch -n 5 -d "ps -eL <java_pid> | wc -l"
untuk melihat jumlah berkelanjutan dari utas asli Linux yang berjalan dalam ID proses Java yang diberikan. Setelah mencapai sekitar 1.000 (untuk kami--YMMV), kami mulai menerima pesan kesalahan yang Anda sebutkan.
Ini biasanya disebabkan oleh kehabisan deskriptor file.
Ada batas deskriptor file total sistem, apa yang Anda dapatkan dari perintah:
sysctl fs.file-nr
Ini mengembalikan jumlah deskriptor file:
<in_use> <unused_but_allocated> <maximum>
Untuk mengetahui batas deskriptor file pengguna, jalankan perintah:
sudo su - <username>
ulimit -Hn
Untuk mengetahui berapa banyak deskriptor file yang digunakan oleh pengguna, jalankan perintah:
sudo lsof -u <username> 2>/dev/null | wc -l
Jadi sekarang jika Anda mengalami masalah batas deskriptor file sistem, Anda perlu mengedit file /etc/sysctl.conf Anda dan menambahkan, atau memodifikasinya yang sudah ada, satu baris dengan fs.file-max dan menyetelnya ke nilai besar cukup untuk menangani jumlah deskriptor file yang Anda butuhkan dan reboot.
fs.file-max = 204708