Мониторинг дескрипторов открытых файлов в Java - независимый от ОС

Моя проблема заключается в том, чтобы контролировать открытые дескрипторы файлов в Java и быть независимым от типа ОС (Linux, Windows и т. д.)

Мое приложение - это серверное веб-приложение, работающее на tomcat и Java8.

Для возможного решения следует рассматривать только сам язык Java, а также Guava и Apache Commons, поскольку моя компания не разрешает использовать какие-либо другие сторонние библиотеки.

Любые предложения о том, как это сделать? Я уже думал о наследовании InputStream и вводить некоторые вещи в его open() а также close() методы, но это не совсем то, что я считаю "хорошим" решением...

Я был бы очень благодарен за вашу помощь!

2 ответа

https://github.com/jenkinsci/lib-file-leak-detector может сделать это при условии, что у вас достаточно контроля над средой для прохождения-javaagent. Было бы нецелесообразно запускать его в производство.

Решение, которое вам не очень нравится, кажется лучшим, вы можете просто отправить сообщение, например, через EventBus (у вас оно есть в Guava), всякий раз, когда вы открываете или закрываете файл. Ваш ManagedFileInputStream просто позвонить enventBus.post(someFilePointer) а также super.open() или же super.close(),

Но есть много других файлов, которые могут быть открыты вашим приложением (jar-файлы, веб-ресурсы, такие как css, изображения, скрипты, временные файлы, созданные tomcat, временные файлы, созданные JVM).

Я думаю, что нет никакого разумного способа контролировать все файлы, открытые Java-приложением, из Java-приложения, может быть, это то, чем должна управлять ОС.

Другие вопросы по тегам