У меня проблема с моим Java веб-приложением: через несколько дней происходит сбой с ошибкой FileSystemException: Too many open files
. Я понимаю, что это значит, но я не могу понять, где я не закрыл файл. Поэтому я пытаюсь написать некоторый код отладки, чтобы помочь мне найти причину этой ошибки: этот код должен возвращать все файловые дескрипторы (и показывает его через конечную точку http отладки):
Files.list(Paths.get(String.format("/proc/$d/fd", pid))).map(
fd -> String.format(
"%s:%s",
fd.getFileName(),
// also I tried fd.toRealPath()
fd.toFile().getCanonicalFile()
)
).collect(Collectors.toList())
Но это код не показывает неработающие ссылки (обозначения c ссылки, где была удалена цель). Path.toRealPath()
терпит неудачу с NoSuchFileException
здесь, Path.toFile().getCanonicalPath()
игнорирует такие ссылки и не показывает цель. Только система ls -l /proc/$pid/fd/
работает правильно и разрешает все ссылки.
Можно ли разрешить такие ссылки, используя Java (1.8 JDK)?