Это аналог для JVM? - PullRequest
       5

Это аналог для JVM?

6 голосов
/ 22 июня 2011

lsof - хороший инструмент для Unix, показывающий все открытые в данный момент дескрипторы файлов.

Кто-нибудь знает подобный инструмент, который бы отображал все открытые файлы внутри работающей JVM (через JVMTI или любой подобный интерфейс)?

В этом конкретном случае мне было бы достаточно знать, какой класс имеет открытую ручку. Метод / строка или даже целая цепочка к корню GC была бы фантастической, но класс владельца обработчика уже хорошее начало.

Я знаю, что могу сделать дамп кучи, открыть его в профилировщике и выяснить это, но это утомительное задание, особенно для больших куч.

1 Ответ

1 голос
/ 22 июня 2011

Опция JVMTI звучит так, будто это не будет плохим выбором. Большая проблема заключалась бы в том, чтобы вы обернули все, что может открыть дескриптор файла: вам, в основном, нужно было бы просмотреть исходный код JDK и найти все нативные функции, которые открывали файл (замусорено в java.io. , java. nio. , я думаю, что java.net. * также, если вы рассматриваете сокеты как дескрипторы файлов, и почти везде, где дескриптор файла может быть открыт встроенной функцией), а затем оберните их все с помощью SetNativeMethodPrefix вызов.

Я предполагаю, что это то, что делают некоторые из профилирующих людей: однако, если вы не обязаны делать это перечисление в режиме реального времени, то я думаю, что было бы ПУТЬ проще использовать lsof или handle (на платформах Windows) и фильтр для идентификатора процесса вашей JVM.

...