JNI를 통해 Java에서 호출되는 네이티브 C DLL에서 사용중인 메모리를 어떻게 모니터합니까? 표준 Java 모니터링 도구 및 옵션을 사용하여 Java 메모리 공간을 볼 수는 있지만 C DLL에서 사용하는 메모리를 볼 수는 없습니다. 자바는 ~ 70MB를 사용하고 있지만 작업 관리자의 작업은 200Mb +를 보여 주며 가능한 경우 해당 130MB의 여분을보고 싶습니다.JNI를 통해 Java로 호출되는 C DLL의 메모리 사용을 모니터링 하시겠습니까?
답변
당신 솔라리스/리눅스에
, 나는 썬 스튜디오 수집/분석이를위한 좋은 도구입니다 들었습니다,하지만 당신은 DLL-땅에 붙어있어 성능 모니터의 카운터로 원시 힙을 모니터링 할 수 있습니다. (perfmon32) 그러나 그것은 DLL 기반으로 당신을 위해 그것을 해치지 않을 것이고 jvm.dll조차 여기에 포함될 것입니다.대부분의 프로파일 링 도구는 프로세스에 연결하여 메모리 할당 및 할당 해제를 캡처하고 추적 할 수 있습니다. 이를 통해 누출 위치를 추측 할 수 있습니다. Java에서 호출 된 네이티브 코드에서 메모리 누수를 추적하려고 할 때 꽤 좋은 점이 하나 있습니다. Memory Validator
Process Viewer을 더 깊이 파고 들으셨습니까?
DLL에 대한 소스가있는 경우 디버그 라이브러리 및 가능하면 메모리 할당 추적기로 다시 빌드 할 수 있으며 Visual C++ 디버거를 사용하여 디버깅 할 수 있습니다 (Java 응용 프로그램을 사용하려면이 DLL을 알려야합니다).
소스가없는 경우 옵션이 제한됩니다.
이 정보는 리차드에게 더 많은 정보를 제공하지만 누출 위치를 결정할만큼 충분하지는 않습니다. Process Viewer는 Windows 기반 개발자를위한 툴킷에 포함 된 훌륭한 도구입니다. – lawsonj2019
소스가 있으면 VS에서 다시 빌드하고 디버그 할 수 있습니다 ... (대답 확장 참조) –
나는 C DLL 내부에서도 이렇게하는 것이 쉽지 않을 것이라고 믿는다.
표준 Java 모니터링 도구는 가상 시스템을 쿼리하여 정보를 수집하므로, 동적으로 링크 된 라이브러리를 검사하는 방법을 가상 시스템이 아는 경우가 아니면 동일한 프로세스에 있습니다. 무엇이든 볼 수 있습니다. 외부 도구를 사용하거나 메모리 사용을 추적하기 위해 DLL을 다소 수정해야한다고 생각합니다.
Java 모니터링 도구는 Java 힙에 대한 정보 만 제공하며, Java 힙에 대한 정보는 제공하지 않으며 Windows에서 기본 호출을 처리합니다. – lawsonj2019
DLL은 실제로 Java 힙에 포함되어 있지 않으므로, 작은 프로파일 링 프로그램 (작은 Java/JNI 프로그램 또는 C++/C# 등)을 작성하는 것이 가장 정확하다고 생각합니다. 가져 오기 및 응용 프로그램과 비슷한 방식으로 DLL을 사용하고 아무 것도하지 - 그냥 DLL을 사용하여 -이 프로파일 링 애플 리케이션의 결과 메모리 프로파일은 DLL의 메모리 프로파일에 대한 좋은 근사해야합니다.
당신은 또한 DLL의 정적 또는 동적 메모리 형태가 있는지 테스트해야합니다 - 직접 이전과 DLL이 ~ 1백30메가바이트의 일회성 히트가 있는지로드 된 후 메모리 성과 지표를 가지고, 또는 메모리가 시간이 지남에 천천히 올라간다면. (말하자면, 또는 DLL 지옥)
- 1. JS에서 데이터 사용을 모니터링 하시겠습니까?
- 2. JNI를 통해 Java에 C++ 클래스를 반환
- 3. JNI를 통해 C++에서 WebView를 동적으로 생성
- 4. TortiseSVN에서 tsvncache.exe의 메모리 사용을 제한 하시겠습니까?
- 5. JNI를 사용하여 C 구조체를 Java로 전송하는 방법은 무엇입니까?
- 6. C++ 프로세스에서로드 된 DLL의 메모리 주소 찾기
- 7. 의 사용을 통해,
- 8. C DLL의 대체 코드를 작성 하시겠습니까?
- 9. C 프로그램의 메모리 사용을 프로파일 링하는 방법
- 10. "readonly"(C#)가 메모리 사용을 줄입니까?
- 11. C++에서 메모리 사용을 추적하는 방법
- 12. WSAStartup 함수는 Winsock DLL의 사용을 어떻게 시작합니까?
- 13. 주기적으로 호출되는 C++ 함수
- 14. Windows에서 메모리 사용을 최소화하는 방법
- 15. JNI를 통해 호출 된 Java 코드 디버그
- 16. C++에서 Java로 객체 반환
- 17. NON.NET 응용 프로그램/DLL의 메모리 사용을 어떻게 분류 할 수 있습니까?
- 18. 1003 개의 쿼리 후 sqlite3 c 라이브러리가 jni를 통해 충돌합니다.
- 19. CHCSVParser의 메모리 사용을 어떻게 제한합니까?
- 20. Environment.WorkingSet이 메모리 사용을 잘못보고 함
- 21. C에서 메모리 사용을 어떻게 추적합니까?
- 22. 특정 프로세스 메모리 스캐닝/모니터링
- 23. 플래시 빌더 - 메모리 모니터링 도구
- 24. 응용 프로그램/추적 메모리 모니터링
- 25. 가상 메모리 영역 모니터링 (Win32)
- 26. JNI를 통해 Math.exp()가 더 빠릅니까?
- 27. PHP를 Java로 컴파일 하시겠습니까?
- 28. .NET에서 Java로 전환 하시겠습니까?
- 29. JSON을 Java로 파싱 하시겠습니까?
- 30. NIO 버퍼의 메모리 사용을 확인하는 방법은 무엇입니까?
힌트를 보내 주셔서 감사합니다, 데 클랜, 월요일에 이걸 시험해 보겠습니다. – lawsonj2019
Java에서 호출 된 JNI DLL의 메모리 사용 모니터링 http://www.softwareverify.com/software-verify-blog/?p=221 –