मेरे जावा प्रोग्रामबहुत अधिक फ़ाइलें खुली त्रुटि लेकिन lsof खुली फ़ाइलों के एक कानूनी संख्या
Caused by: java.io.IOException: Too many open files
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)...
यहाँ /etc/security/limits.conf
से प्रमुख लाइनें हैं के साथ विफल हो रहा है पता चलता है। वे 500k पर एक उपयोगकर्ता के लिए अधिकतम फ़ाइलों सेट:
root soft nofile 500000
root hard nofile 500000
* soft nofile 500000
* hard nofile 500000
मैं फ़ाइलों की संख्या की गणना करने के लिए करने के लिए खोलने के lsof
भाग गया - दोनों विश्व स्तर पर और JVM प्रक्रिया के द्वारा। मैंने /proc/sys/fs
में काउंटर की जांच की। सब ठीक लगता है। मेरे प्रक्रिया केवल 4301 फ़ाइलों खुला है और सीमा 500k है:
:~# lsof | wc -l
5526
:~# lsof -uusername | wc -l
4301
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-nr
4736 0 744363
यह एक उबंटू 11.04 सर्वर है। मैंने भी रिबूट किया है इसलिए मैं सकारात्मक हूं कि इन पैरामीटर का उपयोग किया जा रहा है।
मैं अगर यह प्रासंगिक है, लेकिन प्रक्रिया एक नवोदय स्क्रिप्ट, जो setuidgid का उपयोग कर प्रक्रिया शुरू होता है, इस तरह से शुरू कर दिया है पता नहीं है:
exec setuidgid username java $JAVA_OPTS -jar myprogram.jar
मैं क्या याद आ रही है?
अपनी ढेर जगह को अपडेट करने और इसे एक बड़ा अधिकतम देने का प्रयास करें। निश्चित नहीं है कि दोनों क्यों संबंधित होंगे, लेकिन मैंने अलग-अलग मुद्दों के असंख्य के लिए उस त्रुटि को मारा है। – Relic
दिलचस्प, धन्यवाद। लेकिन यह पहले से ही -Xmx5800m है :) – hughw
कुछ जहां प्रक्रिया पेड़ में आप ulimit का उपयोग कर नई सीमा निर्धारित कर रहे हैं? – Jayan