성능 테스트 - Tomcat 모니터링 및 튜닝: Jconsole 모니터링

JConsole의 그래픽 사용자 인터페이스는 JMX(Java Management Extensions) 사양을 준수하는 모니터링 도구로, JConsole은 Java VM(Java Virtual Machine)을 사용하여 Java 플랫폼에서 실행되는 애플리케이션에 대한 성능 및 리소스 소비 정보를 제공합니다. Java 플랫폼, Standard Edition(Java SE 플랫폼) 6에서 JConsole은 여기에 제시된 대로 Windows 및 GNOME 데스크탑과 유사한 현재 모양과 느낌으로 업데이트되었습니다(다른 플랫폼에서는 이제 표준 Java 그래픽 모양과 느낌을 갖습니다). 문서 스크린샷은 Windows XP에서 실행되는 인터페이스의 예입니다.

Jconsole은 실행 파일입니다. Java 루트 디렉터리에 bin 파일이 있습니다. 이 파일 아래에 jconsole 파일이 있습니다. 클릭하면 프로그램이 직접 실행됩니다. jconsole의 경로가 환경 변수로 설정되어 있으면 직접 할 수 있습니다. 시작 메뉴에서 열어 실행 명령에 jconsole 명령을 직접 입력하면 jconsole 프로그램이 실행됩니다.환경 변수로 설정되지 않은 경우 전체 경로를 작성해야 합니다.

JConsole 프로그램을 시작하는 방법에는 두 가지가 있습니다. 하나는 매개변수로 시작하는 것이고, 다른 하나는 매개변수 없이 시작하는 것입니다.

매개변수를 사용하여 JConsole을 시작할 때 두 가지 상황이 있습니다. 하나는 로컬 진행 상황을 모니터링하는 것이고, 다른 하나는 원격 모니터링입니다.

로컬 모니터링을 위한 명령 형식은 다음과 같습니다.

JConsole processID

processID는 애플리케이션의 프로세스 ID(PID)를 나타냅니다. 애플리케이션의 PID는 다음 방법을 사용하여 확인할 수 있습니다.

● UNIX 또는 Linux 시스템에서는 ps 명령을 사용하여 실행 중인 Java 인스턴스의 PID를 찾을 수 있습니다.

● Windows 시스템에서는 작업 관리자를 사용하여 java 또는 javaw 프로세스의 PID를 찾을 수 있습니다.

예: JConsole 프로그램을 모니터링하고 JConsole의 프로세스 번호가 5604인 경우 다음 명령을 사용하여 JConsole을 시작할 수 있습니다.

JConsole 5604

원격 모니터링을 위한 명령 형식은 다음과 같습니다.

JConsole 主机名:portNum

호스트 이름은 모니터링해야 하는 호스트이고, portNum은 JVM(Java Virtual Machine) 시작 시 지정한 JMX 에이전트의 포트 번호입니다.

참고: JConsole을 사용하여 로컬 애플리케이션을 모니터링하는 것은 프로토타입을 개발하고 생성할 때 매우 유용하지만 Jconsole 자체도 많은 시스템 리소스를 소비하므로 프로덕션 환경에서는 권장되지 않습니다.

매개 변수 명령 없이 Jconsole 프로그램을 실행하면 그림 10-6과 같이 Jconsole New Link 대화 상자가 나타납니다 .

그림 10-6 Jconsole 새 연결

Jconsole에는 로컬 프로세스 모니터링과 원격 모니터링이라는 두 가지 모니터링 방법이 있습니다.

●로컬 프로세스 모니터링을 선택합니다.JConsole 프로그램과 동일한 사용자의 프로세스가 아래 목록 상자에 나열됩니다.프로세스 중 하나를 선택하고 연결 버튼을 클릭하면 모니터링할 기본 인터페이스로 이동합니다.

●원격 모니터링을 선택하면 필수 내용이 포함되어 있습니다. JMX 에이전트의 호스트 이름과 포트 번호, 그리고 서버에 액세스하기 위한 사용자 이름과 비밀번호입니다.

연결이 성공하면 그림 10-7과 같이 모니터링 인터페이스가 팝업됩니다 .

그림 10-7 모니터링 기본 인터페이스

모니터링 콘텐츠에는 주로 개요, 메모리, 스레드, 클래스, VM 요약 및 MBean의 6가지 측면이 포함됩니다 .

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

요약정보

요약 정보 모니터링 인터페이스에는 주로 힙 메모리 사용량, 스레드 수, Java VM에 로드된 클래스 및 CPU 사용량이 포함됩니다. 모니터링되는 시간 세그먼트를 전환하려면 각 보기를 선택하고, 보기의 데이터를 쉼표로 구분된(CSV) 파일로 저장하세요.

메모리 정보

메모리 모니터링 정보는 주로 그림 10-8과 같이 메모리 사용량과 메모리 풀 정보를 제공한다 .

그림 10-8 메모리 모니터링 정보

메모리 모니터링 정보는 주로 힙(Heap) 메모리와 비힙(Non-Heap) 메모리 두 가지 메모리 소비 정보를 모니터링하는데 , 이 두 가지 메모리도 자바 가상 머신(Java Virtual Machine)이 관리하는 두 가지 메모리 유형으로, 둘 다 자바 가상 머신(Java Virtual Machine) 시작 시 생성된다.

● 힙 메모리는 런타임 데이터 영역으로 Java VM의 모든 클래스 인스턴스와 배열이 메모리를 할당하며 고정 크기 또는 가변 크기 힙일 수 있습니다.

● 비힙 메모리에는 모든 스레드 및 Java 가상 머신 내에서 처리 또는 최적화에 필요한 공유 방법이 포함됩니다. 클래스 구조, 실행 상수 풀, 필드 및 메소드 데이터, 메소드 및 생성자의 코드를 저장합니다. 메소드 영역은 특정 구현에 따라 논리적으로 힙의 일부입니다. 구현에 따라 JVM(Java Virtual Machine)은 가비지 수집이나 압축을 수행하지 못할 수도 있습니다. 힙 메모리와 마찬가지로 메소드 영역은 크기가 고정되거나 가변적일 수 있으며 메소드 영역의 메모리는 연속적일 필요가 없습니다.

메소드 영역 외에도 JVM(Java Virtual Machine)은 내부 처리 또는 최적화를 수행해야 할 수도 있으며, 이는 또한 비힙 메모리이기도 합니다. 예를 들어, JIT(Just-In-Time) 컴파일러에는 JVM(Java Virtual Machine)의 고성능 코드에서 번역된 기계어 코드를 저장하기 위한 메모리가 필요합니다.

Jconsole에서 제공하는 모니터링되는 힙 및 비힙 메모리에는 주로 다음 범주가 포함됩니다.

Eden Space 메모리 풀: 대부분의 객체가 초기화될 때 할당되는 메모리 풀

Survivor Space 메모리 풀: 이 메모리 풀에 포함된 객체는 Eden Space 메모리 풀을 재활용한 후 살아남은 객체입니다.

Tenured Gen 메모리 풀: 이 메모리 풀에 포함된 객체입니다. 메모리 풀은 일정 기간 동안 생존자 공간 메모리 풀에 존재했던 개체

코드 캐시 메모리 풀: HotSpot Java VM의 코드 캐시와 코드 컴파일 및 저장에 사용되는 메모리를 포함

Perm Gen[shared-rw] 메모리 pool: Perm Gen 메모리 풀의 읽기-쓰기 영역,

Perm Gen [shared-ro] 메모리 풀: Perm Gen 메모리 풀의 읽기 전용 영역,

Perm Gen 메모리 풀: 가상 머신 자체에서 반영한 데이터가 포함된 메모리 풀입니다. 클래스 및 메소드와 같은 Java 가상 머신 이러한 클래스 데이터 영역은 런타임 중에 공유되며 공유 영역에는 읽기 전용 및 읽기-쓰기의 두 가지 모드가 있습니다.

차트 드롭다운 목록 상자에서는 모니터링할 다양한 메모리 풀을 선택하고 현재 메모리 풀에서 사용하는 메모리 정보를 얻을 수 있습니다. 또한 오른쪽 하단에 힙 아이콘과 힙이 아닌 아이콘이 표시됩니다. 표시된 차트에 따라 메모리 풀 차트에 표시되는 내용도 변경되며, 빨간색으로 표시되면 사용된 메모리가 메모리 임계값을 초과했다는 의미입니다.

메모리 풀과 메모리 관리자는 JVM(Java Virtual Machine) 메모리 시스템의 핵심 링크입니다.

메모리 풀은 Java 가상 머신이 관리하는 메모리 영역을 나타냅니다. JVM(Java Virtual Machine)은 적어도 하나의 메모리 풀을 가지고 있으며, 실행 중에 메모리 풀을 생성하거나 삭제할 수 있으며, 메모리 풀은 힙 메모리 또는 비힙 메모리에 속할 수 있습니다.

메모리 관리자는 하나 이상의 메모리 풀을 관리합니다. 가비지 컬렉터는 도달할 수 없는 객체가 사용하는 메모리를 회수하는 역할을 담당하는 메모리 관리자입니다. Java 가상 머신에는 하나 이상의 메모리 관리자가 있을 수 있습니다. 실행 중에 메모리 관리자를 추가하거나 제거할 수 있습니다. , 메모리 풀은 둘 이상의 메모리 관리자에 의해 관리될 수 있습니다.

메모리 사용량에 대한 세부 정보는 주로 다음 정보를 포함하여 "세부 정보" 상자에 표시됩니다 .

●사용됨: 사용되었거나 사용 가능하거나 사용할 수 없는 메모리를 포함하여 현재 사용된 메모리 양입니다.

●할당: 할당된 메모리는 Java 가상 머신에서 요구하는 사용량을 보장해야 합니다. 커밋된 메모리는 시간이 지남에 따라 변경될 수 있습니다. Java 가상 머신은 시스템 메모리를 해제할 수 있으며, 할당된 메모리는 처음 시작할 때 할당된 메모리보다 작을 수 있습니다. 할당된 메모리 양은 필요한 메모리 양보다 크거나 같습니다.

●최대값: 메모리 관리에서 사용할 수 있는 최대 메모리입니다. 이 값은 변경되거나 불확실합니다. Java Virtual Machine에서 사용하는 메모리가 계속 증가하여 할당된 메모리 양보다 커지면 메모리 할당이 실패합니다.

●GC 시간: 누적 가비지 수집 시간 및 총 호출 시간 여러 줄을 포함할 수 있으며 각 줄은 Java 가상 머신의 가비지 수집기 알고리즘에 의해 소비되는 시간을 나타냅니다.

가비지 컬렉션(GC Garbage Collect)은 JVM(Java Virtual Machine)이 더 이상 참조되지 않는 개체가 점유하고 있는 메모리를 해제하는 메커니즘으로, 일반적으로 현재 활성 상태인 개체를 "살아 있는" 개체와 참조할 수 없거나 참조할 수 없는 "죽은" 개체로 간주합니다. 개체의 경우 가비지 수집은 "죽은" 개체가 차지한 메모리를 해제하는 프로세스입니다. 가비지 수집의 알고리즘과 매개변수는 성능에 큰 영향을 미칩니다.

Java HotSpot 가상머신의 Garbage Collector는 Generation GC를 사용하는데, Generation GC의 장점은 대부분 다음과 같이 요약됩니다.

반복자 및 지역 변수와 같은 일부 단기 개체를 생성하고,
상위 수준 영구 개체와 같은 일부 수명이 긴 개체를 생성합니다.

Generational GC는 여러 세대로 나누어 각 세대마다 하나 이상의 메모리 풀이 할당되며, 한 세대가 할당된 메모리를 사용하면 가상 머신에서 로컬 GC(마이너 컬렉션이라고도 함)가 실행되고 메모리 풀은 메모리 풀을 회수합니다. 죽은 개체가 사용하는 메모리. 이 부분 GC는 일반적으로 전체 GC보다 훨씬 빠릅니다.

Java HotSpot 가상 머신은 Young 세대(때때로 "nursery"라고도 함)와 Old 세대의 두 세대를 정의 합니다. Young 세대에는 하나의 "Eden 공간"과 두 개의 "Survivor 공간"이 포함됩니다. 처음에 VM은 모든 개체를 " Eden space' 메모리 풀이 있고, 대부분의 객체는 거기서 '죽는다'. 마이너 GC(minor GC)를 수행하면 VM은 남은 객체를 'Eden space'에서 'survivor space'로 옮기고, 가상의 장기 생존 시간 객체를 옮긴다. Old 세대의 "tenured" 공간으로 이동됩니다. Old 세대가 채워지면 완전한 GC가 발생합니다. 완전한 GC는 모든 살아있는 객체를 포함하기 때문에 매우 느린 경향이 있습니다. 영구 세대에는 가상 반사가 포함됩니다. 클래스 및 메소드와 같은 모든 시스템 자체 데이터.

가비지 수집기에 병목 현상이 발생하는 경우 생성 크기를 사용자 지정하여 성능을 향상시킬 수 있습니다.

스레드 정보

스레드의 모니터링 정보는 그림 10-9와 같다 .

그림 10-9 Thread 모니터링 정보

모든 활성 스레드는 왼쪽 하단의 "스레드" 목록에 표시됩니다. 지정된 스레드를 찾아야 하는 경우 "필터" 필드에 찾을 스레드를 입력하고 스레드를 선택하면 현재 스레드가 표시됩니다. 오른쪽 텍스트 상자에 이름, 상태, 스택 추적 정보가 표시됩니다.

위의 스레드 번호 보기는 현재 활성 스레드 수를 동적으로 표시하며, 여기에는 주로 현재 활성 스레드 수와 최대 스레드 수라는 두 부분이 포함됩니다.

스레드 모니터링 뷰에서는 교착 상태 스레드를 감지하는 기능도 제공하는데, [Deadlock Detected] 버튼을 클릭하면 스레드 개체 모니터에 교착 상태가 발생한 경우 교착 상태가 발생한 스레드의 ID 번호가 표시되고, 현재 스레드에 대한 정보가 표시됩니다. 표시됩니다.

Java Virtual Machine 스레드 정보의 모든 속성과 작업은 MBean 탭에서 모니터링할 수 있습니다.

수업정보

클래스의 모니터링 정보는 그림 10-10과 같다 .

그림 10-10 유형 모니터링 정보

로드된 클래스 수 보기에는 로드된 클래스의 총 개수와 현재 로드된 클래스가 표시되는데, 실제로 빨간색 선은 로드된 클래스의 총 개수를 나타내고 파란색 선은 현재 로드된 클래스를 나타냅니다. 세부 정보에는 현재 로드된 클래스, 로드된 클래스의 총 개수, 로드되지 않은 클래스의 총 개수가 표시됩니다.

VM 요약 정보

VM 요약의 모니터링 정보는 그림 10-11과 같습니다 .

그림 10-11 VM 요약 정보

VM 요약 정보에는 주로 요약 정보, 스레드 및 클래스 정보, 메모리 정보, 운영 체제 정보 및 기타 정보 의 5가지 정보 측면이 포함됩니다 .

요약 섹션의 정보에는 주로 다음 정보가 포함됩니다.

연결 이름: 모니터링 연결 시 처리 PID 정보,
실행 시간: JVM(Java Virtual Machine)이 처음부터 실행된 총 시간,
처리 CPU 시간: Java VM 시작, 총 CPU 소비 시간,
총 컴파일 시간 : JIT 컴파일 시간에 소요된 누적 시간입니다.

스레드 및 클래스 정보에는 주로 다음 정보가 포함됩니다.

활성 스레드: 현재 활성 스레드;
피크: 최대 스레드 수;
데몬 스레드: 백그라운드에서 실행 중인 스레드;
총 시작된 스레드 수: 지금까지 시작된 스레드 수;
현재 로드된 클래스: 현재 실행 중인 프로세스의 총 개수 로드된 클래스,
로드된 클래스의 총 수: 지금까지 로드된 클래스의 총 수,
언로드된 클래스의 총 수: 지금까지 로드되지 않은 클래스의 총 수,

메모리 정보에는 주로 다음 정보가 포함됩니다.

현재 힙 크기: 현재 힙이 할당한 메모리 공간
할당된 메모리: 현재 할당된 메모리 크기
힙 최대값: 힙에 할당된 메모리의 최대값
보류 중인 종료 작업: 현재 일시적으로 정지된 객체 ;
가비지 수집 수집기: 가비지 수집기는 수집기의 이름, 수집기가 수집한 메모리 양 및 이러한 메모리를 수집하는 데 소요된 시간을 설명합니다.

운영 체제 정보에는 주로 운영 체제 이름, 아키텍처, 할당된 가상 메모리, 총 물리적 메모리, 사용 가능한 물리적 메모리, 총 스왑 공간 및 사용 가능한 스왑 공간이 포함됩니다.

기타 정보에는 주로 다음 정보가 포함됩니다.

VM 매개변수: 애플리케이션을 통해 JVM(Java Virtual Machine)에 전달된 매개변수를 표시하며, 이 매개변수에는 메인 메소드의 매개변수가 포함되지 않습니다.
클래스 경로: 시스템 클래스 로더가 클래스 파일을 검색하기 위해 사용하는 클래스 경로,
라이브러리 경로: To 라이브러리 로드 시 검색 경로 목록,
부트 클래스 경로: 부트 클래스 로더가 클래스 파일을 검색하는 경로 목록,

MBean 정보

MBeans 탭은 MBean 서버에 등록된 MBean의 클래스를 표시합니다. MBeans 탭을 통해 플랫폼 MXBean 서버에 접근할 수 있습니다. 또한 애플리케이션의 MBean을 모니터링하고 관리할 수도 있습니다. MBean 정보는 그림 10-12와 같습니다. .

그림 10-12 MBean 정보

왼쪽에는 현재 실행 중인 모든 MBean이 표시되고, MBean 트리에서 MBean을 선택하면 오른쪽에는 현재 선택된 MBean의 MBeanInfo 및 디스크립터 정보가 표시되며, 아래에는 현재 MBean의 관련 속성, 작업 및 알림 정보가 표시됩니다. .

MBean 속성

MBean 트리에서 MBean을 선택하고 "속성" 노드를 클릭합니다. MBean의 모든 속성이 표시됩니다. 그림 10-13에 표시된 대로 메모리를 예로 들어 보겠습니다 .

그림 10-13 메모리 속성

속성 아래에서 단일 속성을 선택하면 그림 10-14와 같이 현재 속성에 대한 세부 정보가 오른쪽에 표시됩니다 .

그림 10-14 속성 세부정보

속성값(즉, 오른쪽의 굵은 글씨)을 클릭하면 상세한 속성값 정보가 확장되며, 확장된 HeapMemoryUsage 속성값은 그림 10-15와 같다 .

그림 10-15 HeapMemoryUsage 세부 정보

표시된 값을 수정하려면 속성 값을 두 번 클릭합니다. 일부 속성은 차트에 표시됩니다. 그림 10-16은 Threading의 CurrentThreadUserTime 속성 값을 보여줍니다.

그림 10-16 속성 값의 차트 표시

Mbean 작업

MBean 트리에서 MBean을 선택하고 "Operation" 노드를 클릭합니다. MBean과 관련된 모든 작업이 표시됩니다. 그림 10-17 에 표시된 것처럼 스레딩을 예로 들어 보겠습니다 .

그림 10-17 스레딩 작업

그림 10-18 과 같이 작업 호출에서 버튼을 클릭하여 이러한 메서드를 호출하고, 메서드를 클릭하면 현재 메서드의 세부 정보가 표시됩니다 .

그림 10-18 방법 세부정보

Mbean 알림

MBean 트리에서 MBean을 선택하고 "Notification" 노드를 클릭한 후 알림을 선택하면 그림 10-19 와 같이 메모리를 예로 들어 알림에 대한 자세한 정보가 오른쪽에 표시됩니다 .

그림 10-19 알림 세부정보

마지막으로 제 글을 꼼꼼히 읽어주시는 모든 분들께 감사하다는 말씀드리고 싶습니다. 늘어나는 팬분들과 관심을 보면서 항상 어느 정도 예의는 갖추었습니다. 별로 귀한 것은 아니지만, 사용하실 수 있다면 직접 가져가셔도 됩니다!

소프트웨어 테스팅 인터뷰 문서

고임금 일자리를 찾으려면 공부를 해야 합니다. 다음 면접 질문은 알리바바, 텐센트, 바이트 등 1위 인터넷 기업의 최신 면접 자료에서 발췌한 것이며 일부 바이트 상사들이 권위 있는 답변을 내놓았습니다. set 저는 면접 정보를 바탕으로 누구나 만족스러운 일자리를 찾을 수 있다고 믿습니다.
 

여기에 이미지 설명을 삽입하세요.

추천

출처blog.csdn.net/m0_58026506/article/details/133102506