Я унаследовал код:
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 может идти в ногу с собой (при условии, что это проблема)