JVM 프로세스에서 정기적 인 스레드 덤프를 사용하여 문제가 발생할 경우 나중에 분석 할 수있는 시스템을 구축하려고합니다. 스레드 덤프를 사용하는 동안 JVM에 최소한의 오버 헤드가 발생합니다. 스레드 덤프를 가져 오는 방법은 여러 가지가 있으며 마침내 사용자 정의 JVMTI 에이전트를 작성하거나 ThreadMXBean을 사용하여 두 가지 옵션을 단축 목록에 추가했습니다. 누군가 JVM 오버 헤드를 줄이기위한 접근 방법에 대한 분석을 수행했는지 궁금합니다. 아니면 같은 오버 헤드가 발생합니까?JVM에서주기적인 스레드 덤프 - ThreadMXBean 대 JVMTI 에이전트
답변
원하는 샘플링 빈도에 따라 다르지만 대부분의 경우 영향을 미치고 결과에 편향이 발생합니다. 그래도 JVMTI를 사용한다면 정직한 프로파일 러를 살펴 보자. https://github.com/RichardWarburton/honest-profiler
감사합니다. 안전한 지점과 AsyncGetCallTrace에 대해 알아두면 좋습니다. 이것은 나의 연구에 매우 유용 할 것이다. – Aniket
'AsyncGetCallTrace'가 프로파일 링에 좋습니다. 그러나 스레드 덤프는 작성하지 않습니다. 나는. AsyncGetCallTrace는 ** 활성 ** 스레드의 좋은 추적을 얻을 수 있지만 모든 스레드의 그림을 제공하지는 않습니다. – apangin
동의. 필자의 유스 케이스는 대부분 특정 스레드에서 모든 스레드가 수행중인 작업을 파악하는 것이 아니라 프로파일 링 필요성에 대한 것입니다. – Aniket
- 1. jvmti 에이전트 데드락
- 2. Qt/qmake로 JVMTI 에이전트 빌드
- 3. Java 에이전트, JVMTI 등을 감지하는 방법
- 4. JVMTI 에이전트의 GUI
- 5. JDI, Java 바이트 코드 계측 및 Java 에이전트 (JWDP, JVMTI)
- 6. JVMTI 에이전트가 충돌합니다.
- 7. Samurai의 스레드 덤프 분석
- 8. 프로덕션에서 스레드 덤프 사용
- 9. 목표 덤프에서 스레드 덤프
- 10. 파이썬 스레드 덤프
- 11. Linux 코어 덤프 대 힙 덤프?
- 12. 잘못된 스레드 상태를 나타내는 스레드 덤프
- 13. "스레드 덤프"의 의미는 무엇입니까
- 14. GC 기록이없는 OutOfMemory 스레드 덤프
- 15. 스레드 덤프 분석 도구/방법
- 16. 멀티 스레드 프로그램의 코어 덤프
- 17. 멀티 스레드 프로그램에서 코어 덤프
- 18. 신호 ocaml에 스레드 스택 덤프
- 19. 전체 GC 동안 스레드 덤프
- 20. jstack을 사용하여 스레드 덤프 사용
- 21. 여러 스레드 대 단일 스레드
- 22. 하드웨어 스레드 대 부드러운 스레드?
- 23. 스레드 풀 대 스레드 산란
- 24. 배경 스레드 대 UI 스레드
- 25. 스레드 ID 대 스레드 핸들
- 26. 리눅스 스레드 수면 대 대
- 27. jvmti for jdk 6 - 참조 및 자습서
- 28. JVMTI _jclass toString
- 29. .NET 용 JVMTI
- 30. hbase with jvmti agent
'ThreadMXBean'은 스레드 덤프를 얻는 가장 나쁜 방법이다. 스택 추적의 Java 수준 표현을 작성하므로 느려지고 힙에 많은 쓰레기가 생성됩니다. JVMTI는 더 나은 방법입니다. 그러나 JVM에 스택 추적을 요청하는 것이 더 좋습니다 (링크 된 답변 참조). – apangin
질문을 연결해 주셔서 감사합니다. JVM에 묻는 것은 내 (프로파일 링) 유스 케이스에서 요구되지 않는 안전한 지점에 대한 waitibg을 의미합니다. 실제로 perf 도구 나 DTrace를 사용하기 시작했습니다. – Aniket
스택 추적의 주된 목적이 CPU 프로파일 링이라면 질문의 말을 바꾸고 싶을 것입니다. 현재의 형태에서 질문은 실제로 이미 대답되었습니다. – apangin