jvisualvm 또는 jprofiler와 같은 Java 프로파일 러를 사용하는 방법은 무엇입니까?
Java 프로파일 러 사용의 핵심은 기능을 이해하고 단계를 따르는 것입니다. 1. 도구를 시작하고 대상 응용 프로그램에 연결하십시오. jvisualvm은 직접 실행되고 로컬 프로세스를 자동으로 식별 할 수 있습니다. JPROFILER를 설치해야하며 원격 연결을 지원합니다. 2. CPU 및 메모리 분석. JPROFILER는 "Call Tree"및 "Hot Spots"를 제공합니다. JvisualVM은 "샘플러"를 통해 CPU를 샘플링하고 둘 다 메모리 트렌드와 객체 할당을 볼 수 있습니다. 3. 스레드 문제를 찾으십시오. jvisualvm "스레드"태그를 통해 상태가 변경됩니다. JPROFILER는 교착 상태를 감지하고 리소스 대기 조건을 표시 할 수 있습니다. 4. 외부 환경 문제 해결 문제와 결합하여 GC 로그 및 응용 프로그램 로그를보고 JVM 매개 변수를 사용하여 성능 병목 현상 분석을 지원합니다.
JvisualVM 또는 JProfiler와 같은 Java 프로파일 러를 사용하는 핵심은 기능적 위치 및 운영 프로세스를 이해하는 것입니다. 두 가지 유형의 도구 모두 응용 프로그램 성능 문제를 분석하는 데 도움이 될 수 있지만 초점은 약간 다릅니다. JvisualVM은 JDK에 내장 된 무료 도구이며 기본 모니터링에 적합합니다. JPROFILER는보다 포괄적 인 기능을 가지고 있지만 성능 병목 현상의 심층 진단에 적합합니다.

1. 대상 응용 프로그램을 시작하고 연결하십시오
어떤 도구에 관계없이, 첫 번째 단계는 분석하려는 Java 응용 프로그램에 시작하고 연결하는 것입니다.
- jvisualvm : 열리는 방법은 매우 간단합니다. JDK의 빈 디렉토리를 입력하고
jvisualvm
실행하십시오. 로컬 실행중인 Java 프로세스를 자동으로 나열하고 클릭하여 연결하려면 클릭합니다. - JPROFILER : 별도로 설치해야합니다. 설치가 완료되면 GUI 인터페이스를 통해 "원격 통합"을 선택하거나 로컬 프로세스에 직접 연결하십시오.
참고 : 원격 서버의 응용 프로그램 인 경우 JMX를 켜거나 에이전트 매개 변수 추가와 같은 일부 구성이 연결되어야합니다. 이 프로세스는 생산 환경에서 일반적이지만 방화벽이 관련 포트와 통신 할 수 있도록해야합니다.

2. CPU 및 메모리 사용을 분석하십시오
연결이 성공하면 응용 프로그램의 실행 상태를 볼 수 있습니다.
-
CPU 분석 :
- JPROFILER에서 "CPU보기"를 선택한 다음 "Call Tree"또는 "Hot Spots"를 선택하여 CPU 시간이 가장 많이 필요한 메소드를 빠르게 찾을 수 있습니다.
- jvisualvm은 먼저 "샘플러"탭을 클릭 한 다음 CPU 샘플링을 활성화 한 다음 결과보기를 중지하기 전에 일정 기간 동안 실행해야합니다.
-
메모리 분석 :
- 주로 힙 메모리의 사용 추세, GC가 빈번한 지, 객체 생성이 합리적인지 여부에 따라 다릅니다.
- JPROFILER는 "할당 핫스팟"기능을 제공하며, 어떤 클래스가 지속적으로 새로운 객체를 생성하는 클래스를 직접 확인할 수 있습니다.
- jvisualvm은 "모니터"탭으로 전환하여 힙 메모리 사용을 보거나 메모리 샘플링을 수행하여 생존 객체의 현재 분포를 확인할 수 있습니다.
제안 : 특정 방법이 특히 많은 수로 호출되거나 일부 클래스가 매우 자주 인스턴스화된다는 것을 알게되면 성능 최적화의 진입 점일 수 있습니다.
3. 스레드 문제와 교착 상태를 찾으십시오
교착 상태, 차단, 불충분 한 스레드 풀 등과 같은 Java 응용 프로그램의 일반적인 스레딩 문제.
- jvisualvm : "스레드"탭을 클릭하여 스레드 상태 변경 다이어그램을보십시오. 스레드가 오랫동안 차단 상태 인 경우 "스레드 덤프"를 클릭하여 세부 사항을 볼 수 있습니다.
- JPROFILER : 전용 "스레드/스레드 상태"보기가 있으며, 이는 잠재적 교착 상태를 감지하고 스레드가 리소스를 기다리는 상황을 보여줄 수 있습니다.
팁 : 교착 상태를 의심하면 스레드 덤프 (스레드 덤프)를 직접 보내고 도구에서 키워드 "교착 상태"를 검색 할 수 있습니다.
4. 외부 환경과 협력하여 확인하십시오
여러 번, 성능 문제는 코드 자체에 문제가되지 않지만 느린 데이터베이스, 네트워크 대기 시간 및 불합리한 GC 설정과 같은 요소로 인해 발생합니다.
- GC 상황보기 : 두 도구 모두에서 전체 GC의 빈도 및 시간 소모를 볼 수 있습니다. 전체 GC를 자주 사용하는 경우 메모리 설정에 문제가있을 수 있음을 의미합니다.
- 로그와 결합 : 프로파일 러는 많은 정보를 제공 할 수 있지만 때로는 응용 프로그램 로그와 협력하여 어떤 섹션이 잘못되었는지 확인해야합니다.
- JVM 매개 변수 지원 사용 : 예를 들어
-XX: PrintGCDetails
추가하여 GC 로그를 출력하여 GC가 병목 현상인지 여부를 결정합니다.
기본적으로 그게 다야. 일반적으로 사용되는 이러한 기능을 마스터하면 가장 일반적인 성능 문제를 찾을 수 있습니다. 복잡하지는 않지만 세부 사항을 무시하는 것은 쉽습니다.
위 내용은 jvisualvm 또는 jprofiler와 같은 Java 프로파일 러를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Stock Market GPT
더 현명한 결정을 위한 AI 기반 투자 연구

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

-CP 매개 변수를 사용하여 JVM이 ClassPath에 추가하여 JAVA -Clibrary.jarcom.example.Main과 같은 내부 클래스 및 리소스를로드 할 수 있으며, 이는 세미콜론 또는 콜론으로 분리 된 여러 항아리를 지원하며 클래스 경로 환경 변수 또는 Manifest.MF를 통해 구성 할 수 있습니다.

usefile.createnewfile () to reatefileonlyifitdoesn'texist, 피하기;

Amplements 키워드를 사용하여 인터페이스를 구현하십시오. 이 클래스는 인터페이스에서 모든 메소드의 특정 구현을 제공해야합니다. 여러 인터페이스를 지원하고 메소드가 공개되도록 쉼표로 분리됩니다. Java 8 이후의 기본 및 정적 메소드는 다시 작성할 필요가 없습니다.

Javaspi는 JDK의 내장 서비스 검색 메커니즘이며 Serviceloader를 통한 인터페이스 지향 동적 확장을 구현합니다. 1. 서비스 인터페이스를 정의하고 Meta-Inf/Services/에서 인터페이스의 전체 이름을 가진 파일을 작성하고 구현 클래스의 정규화 된 이름을 작성하십시오. 2. serviceloader.load ()를 사용하여 구현 클래스를로드하면 JVM은 자동으로 구성을 읽고 인스턴스화합니다. 3. 인터페이스 계약은 설계 중에 명확 해지고 우선 순위 및 조건부로드를 지원하며 기본 구현을 제공해야합니다. 4. 응용 프로그램 시나리오에는 다중 지불 채널 액세스 및 플러그인 확인이 포함됩니다. 5. 성능, 클래스 경로, 예외 분리, 스레드 안전 및 버전 호환성에주의하십시오. 6. Java9에서는 모듈 시스템과 함께 제공 될 수 있습니다.

이 기사에서는 동일한 TCP 소켓, 즉 HTTP 영구 연결 (Keep-Alive)에서 여러 HTTP 요청을 전송하는 메커니즘을 심층적으로 살펴 봅니다. 이 기사는 HTTP/1.X와 HTTP/2 프로토콜의 차이를 명확히하고 지속적인 연결에 대한 서버 측 지원의 중요성과 연결을 올바르게 처리하는 방법 : 응답 헤더를 정확하게 처리하는 방법을 강조합니다. 일반적인 오류를 분석하고 모범 사례를 제공함으로써 개발자가 효율적이고 강력한 HTTP 클라이언트를 구축 할 수 있도록 도와줍니다.

javagenericsprovidecompile-timetypesafetyandeliminatecastingtypeparametersonclasses, interfaces, methods; wildcards (?,? extendStype,? supertype) handlUnknowntypeswithflexible.1.useUnunUnunUndwildCardWhentyPeiLISIRVENTERREATHERNEATHEATHEATHEATHEATHEATHEATHEATHEATHEARVENTOUBERDERRELOUNTERRELONTERREATHEARBERBERBENTECASTS;

이 튜토리얼은 Java의 다른 배열 목록을 포함하는 중첩 된 배열 목록을 효율적으로 처리하고 모든 내부 요소를 단일 배열로 병합하는 방법을 자세히 설명합니다. 이 기사는 Java 8 Stream API의 FlatMap 작동을 통해 두 가지 핵심 솔루션을 제공합니다. 첫 번째는 목록으로 평평한 다음 배열을 채우고 다른 시나리오의 요구를 충족시키기 위해 새로운 배열을 직접 작성합니다.

속성 클래스를 사용하여 Java 구성 파일을 쉽게 읽으십시오. 1. config.properties를 리소스 디렉토리에 넣고 getClassLoader (). getResourCeasStream ()을 통해로드하고로드 () 메서드를 호출하여 데이터베이스 구성을 읽습니다. 2. 파일이 외부 경로에있는 경우 FileInputStream을 사용하여로드하십시오. 3. GetProperty (키, 기본값)를 사용하여 누락 된 키를 처리하고 기본값을 제공하여 예외 처리 및 입력 확인을 보장합니다.
