Я унаследовал некоторый код:
Process p = new ProcessBuilder("/bin/chmod", "777", path).start();
p.waitFor();
По сути, существует некоторая древняя и очень вуду основанная причина для хранения пар ключ / значение на диске в виде файлов. Я действительно не хочу вдаваться в подробности.
Однако у меня осталось несколько исключений ввода-вывода:
Exception :Cannot run program "/bin/chmod": java.io.IOException: error=24, Too many open files
Message: Cannot run program "/bin/chmod": java.io.IOException: error=24, Too many open files
И под кучей я подразумеваю в сферах 10k - миллионы
У меня такое ощущение, что вызов waitFor состоял в том, чтобы остановить их, ожидая, пока процесс завершит его, и выйдет обратно, однако я думаю, что chmod возвращает результат до того, как файл будет фактически закрыт. Кто-нибудь знает, будет ли это причиной этих исключений?
Мое другое стремление заключается в том, что открытие и закрытие тысяч файлов не происходит достаточно быстро на Java-конце и что происходит что-то еще, может быть, что-то подобное, есть какая-то форма буфера файлов, которая не получает очищается при вызове fw.close ().
Я довольно новичок в Java, и это был чертовски странный вопрос, который поставил меня в тупик. (К счастью, приложение все еще работает как-то .. после выплевывания очень большого файла журнала, который есть)
Может кто-нибудь еще придумать, как обойти это, очистить буферы или увеличить лимит открытия файлов до чего-то, где jvm может справиться с самим собой (предполагая, что это проблема)