почему возникает эта ошибка? : java.io.FileNotFoundException: /dir/myfile.txt (слишком много открытых файлов) - PullRequest
0 голосов
/ 04 марта 2010

Я написал приложение, которое безупречно работает в Windows и выдает эту ошибку в Unix.

Вообще, я не понимаю, почему я получаю эту ошибку! Я создаю один файл и добавляю к нему текст. После того, как я добавил пару тысяч строк, я получил эту ошибку ...

Любое понимание будет оценено.

Ничто в javadoc не перечисляло эту (слишком много файлов открыто) ошибку - http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileNotFoundException.html

И этот пост мне не помог ... Слишком много открытых файлов: сколько открыто, что они и сколько может открыть JVM

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 04 марта 2010

Не видя ваш код, это догадка, но, скорее всего, вы создаете новый объект FileWriter или FileOutputStream каждый раз, когда добавляете его, но не обращаете внимания на вызов close() для этих объектов, что в конечном итоге приводит к запуску вне файловых дескрипторов (ресурс уровня ОС, который не зависит от памяти и, следовательно, не обрабатывается надлежащим образом сборщиком мусора, требующим ручного освобождения).

Чтобы решить эту проблему, либо держите один Stream / Writer и используйте его вместо создания нового каждый раз (вероятно, это будет быстрее), либо вызывайте close() каждый раз, когда вы завершаете добавление.

0 голосов
/ 04 марта 2010

В среде Linux это обычно ограничено флагом 'ulimit'. На уровне операционной системы он в основном определяет количество файлов, которые вы можете открыть за раз. Если у вас много зависимостей, возможно, они должны быть загружены, и вы можете превысить максимально возможное значение.

Попробуйте установить ulimit равным 4096, прежде чем запускать приложение, и повторите попытку.

Edit: См. http://www.faqs.org/docs/securing/x4733.html для получения дополнительной информации

0 голосов
/ 04 марта 2010

Возможно, вы случайно открываете новый дескриптор файла для каждого добавления? Ограничения зависят от ОС. Но как насчет публикации некоторого кода - трудно догадаться, что не так, не видя его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...