아마 jniwrap.jar and winpack.jar을 사용하고 있기 때문에 자체 JNI 코드를 굴릴 필요가 없습니다. Java 서비스의 "Virtual Bytes"성능 카운터를 어떻게 읽을 수 있습니까? 이 서비스는 자체 성능 카운터를 읽어 가상 주소 공간의 사용량을 주기적으로 기록 할 수 있습니다. 현재 OS JMX MBean에서 반환 한 JMX 값 "CommittedVirtualMemorySize"를 기록하지만 이는 이 커밋 된 인 메모리 양만 표시하므로 가상 주소 공간을 소진할지 여부를 이해하는 데 도움이되지 않습니다.Java 프로세스에서 Java의 Windows "Virtual Bytes"성능 카운터를 읽으려면 어떻게해야합니까?
이는 Java 컴파일러 스레드가 C 힙을 소모하여 프로세스의 전체 JVM을 충돌시키는 Java 기반 서버 프로세스를위한 것입니다. 내 자신의 코드는 범인이 아닙니다. JVM 자체입니다. 그러나이 진단 데이터는 서비스의 전체 가상 주소 공간 요구 사항을 이해하는 데 도움이됩니다.
편집 :이 질문을 한 이후로 지금까지는 여러 가지 시도를 해 보았습니다. winpack.jar는 레지스트리 액세스를 허용하고 레지스트리와 같은 액세스를 통해 성능 데이터에 대한 액세스를 제공하는 레지스트리 키 RegistryKey.PERFORMANCE_DATA
이 있지만 항상 키가 없습니다. VB에서이 메서드를 사용하여 성능 데이터를 얻은 일부 sample code을 찾았습니다. 심지어 해당 코드를 사용해도 데이터가 반환되지 않았습니다. 이것은 Win7Pro 바탕 화면에 있습니다. 이 데이터는 기본적으로 사용할 수 없습니까? '
PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "Virtual Bytes";
PC.InstanceName = "Java#1";
PC.ReadOnly = true;
float VirtualBytes = PC.NextValue();
하지만 난 할 수 있습니다 내가 작업하는 방법을 얻을 수없는 경우
후 나는 유일한 선택은 어떻게 든이 C# 코드에 자바 동등한 코드를 실행 jniwrap를 사용하거나 winpack하려고 생각 이것을하기위한 좋은 방법을 생각해보십시오. 누구나 Jniwrapper/winpack에 익숙한가요? 아니면 이것을 수행하는 방법을 제안 할 수있는 레지스트리를 통해 성능 데이터를 얻는 것입니까?
이 정보를 얻기 위해 외부 C# 프로그램이나 WMI 스크립트를 작성할 가능성이 있음을 알고 있지만이 정보에 프로그래밍 방식으로 직접 액세스하는 것보다 구현 속도가 느리고 더 많은 작업이 필요하다고 생각합니다.
C#에서 dll을 만들고 java com bridge를 사용하여 java에서 호출합니다. – Shahzeb
이것이 가장 쉬운 해결책 일 수 있습니다. 왜냐하면이 내용은 C#으로 들어가기에 너무 사소한 것이기 때문입니다. – Eddie