Как составить список всех потоков операционной системы хоста из виртуальной машины Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как составить список всех потоков операционной системы хоста из виртуальной машины Java?

Сообщение Anonymous »

Есть ли в стандартной библиотеке Java какой-либо API, с помощью которого внутри JVM можно выполнить некоторый Java-код, в котором перечислены все потоки операционной системы хоста, на которой работает JVM?
В частности, я хочу перечислить не все потоки Java JVM, выполняющие мой Java-код, а список потоков операционной системы хост-системы, в которой хост-процесс, запускающий JVM, является лишь одним из потоков ОС. Поэтому мне нужен список потоков ОС, аналогичный тому, который команда Linux top покажет при запуске кода Java.
В лучшем случае есть способ, позволяющий из Java запросить идентификатор потока ОС, который запускает JVM, в которой выполняется код Java для получения списка всех этих потоков ОС. Это потребуется для некоторой балансировки нагрузки, которую я хотел бы реализовать для Java.
РЕДАКТИРОВАТЬ:
Тем временем я нашел Hyperic Sigar, который вызывает написанные библиотеки для Windows и Linux. К сожалению, у меня происходит сбой, и, похоже, его выпуск прекращен.
Находясь в Windows, я загружаю Sigar Windows DLL. У меня работает вызов «System.loadLibrary» (сбой, пока он не заработал):

Код: Выделить всё

static {
System.loadLibrary("sigar-amd64-winnt");
}
Но запуск кода из sigar.jar приводит к дампу стека:

Код: Выделить всё

public static void main(String[] args) throws SigarException {
var sigar = new Sigar();
var list = sigar.getCpuList();
for(var cpu : list) {
System.out.println(cpu);
}
}
Но затем выполнение «sigar.getCpuList()» приводит к сбою:

Кадры Java: (J=скомпилирован Код Java, j=интерпретируемый, Vv=код VM)
j org.hyperic.sigar.Sigar.getCpuListNative()[Lorg/hyperic/sigar/Cpu;+0
j org.hyperic.sigar. Sigar.getCpuList()[Lorg/hyperic/sigar/Cpu;+1
j org.objectscape.Scratch.main([Ljava/lang/String;)V+9
v ~StubRoutines::call_stub

Похоже, что библиотека Windows больше не работает для новых JDK.
Думаю, есть способ для перечисления всех потоков ОС, на которых работает некоторая JVM, которая была добавлена ​​в более новую версию JDK. Просто не могу его вспомнить и могу найти в Интернете...

Подробнее здесь: https://stackoverflow.com/questions/790 ... -a-java-vm
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»