Запись абсолютно необязательна, но указанная ошибка связана с компиляцией, а не с временем выполнения, поэтому весьма маловероятно, что это проблема.
Серверы приложений часто очень требовательны к файлам, и если ничего не было сделано для увеличения лимита открытых файлов, значение по умолчанию может быть недостаточно высоким.
Например, на CentOS мы обнаружили, что даже в QA (не нагрузочное тестирование, а только функциональное тестирование) сервер может максимально использовать свой предел с JBoss 4.2.
РЕДАКТИРОВАТЬ: единственное, что не так с кодом, который вы разместили в плане сохранения файлов, это то, что вы должны использовать finally , чтобы закрыть ваш поток. В серверном приложении может случиться так, что этот код часто вызывает исключение, в результате чего файлы не закрываются (потому что вы не закрываете их в конечном итоге), и со временем эти дескрипторы открытых файлов складываются. Существуют и другие проблемы, связанные с тем, как вы это делаете (например, для определения размера байтового массива available()
), но это не должно влиять на вашу проблему.
Другая возможность состоит в том, что под * nix системными сокетами используется тот же ресурс, что и у файлов, поэтому может случиться так, что у вас слишком много открытых сокетов (сверх того, что настроено для системы), в результате чего этот код не сможет быть выполнен.