Мониторинг дескрипторов открытых файлов в 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-приложения, может быть, это то, чем должна управлять ОС.