간단한 메모리 누수 감지
이 주제는 Java™ 애플리케이션에서의 메모리 누수를 설명하며 경량 메모리 누수 발견을 소개합니다.
Java 애플리케이션에는 내장된 가비지 컬렉션 메커니즘이 있고, 프로그래머가 명시적인 오브젝트 할당 해제 작업을 수행하지 않아도 되지만 Java 애플리케이션에는 메모리 누수가 계속 자주 발생합니다. 고의가 아닌 참조가 미사용된 오브젝트에 대해 작성되면 Java 애플리케이션에서 메모리 누수가 발생합니다. 이 경우 Java 가비지 콜렉션에서 메모리를 확보할 수 없습니다.
메모리 누수 라는 용어가 남용되고 있습니다. 메모리 누수란 메모리를 잘못 사용하거나 잘못 관리하는 것을 의미합니다. 사용하지 않은 이전 데이터 구조에 해결하지 않았지만 가비지로 수집되지 않은 참조가 있을 수 있습니다. 데이터 구조에 바인딩되지 않은 증가가 있거나 애플리케이션 세트를 효율적으로 실행하기 위해 필요한 메모리가 충분히 할당되지 않았을 수 있습니다.
기존의 메모리 누수 기술은 대부분 사용자가 메모리 누수 사실을 알고 있는 상태에서 메모리 누수를 찾는다는 전제를 기반으로 합니다. 이러한 분석 요구사항으로 인해 기존의 기술은 성능 부담이 크고 프로덕션 환경에서의 감지 메커니즘으로 사용할 수 있도록 디자인되지 않았습니다. 이러한 제한은 일반적으로 문제점이 심각해지기 전에는 메모리 누수 사실이 감지되지 않음을 의미합니다. 즉, 애플리케이션이 모든 시스템 테스트를 통과하여 프로덕션 환경에서 충돌해도 그 이유를 판별할 수 없습니다.
WebSphere® Application Server는 WebSphere 성능 및 진단 어드바이저 프레임워크 내 실행하는 경량 메모리 누수 검색 메커니즘을 구현했습니다. 이 메커니즘은 테스트 및 프로덕션 환경에서 메모리 문제점을 조기에 감지할 수 있도록 디자인되었습니다. 이 프레임워크는 문제점 소스에 대한 분석을 제공하기 위해서가 아닌 알림을 제공하고 분석 도구를 사용하는 데 필요한 정보를 하는 데 도움을 줄 수 있도록 디자인되었습니다. 이 메커니즘은 Java 힙의 메모리 누수만 감지하고 기본 누수는 감지하지 않습니다.
WebSphere Application Server의 경량 메모리 누수 감지는 임의의 추가 에이전트를 필요로 하지 않습니다. 이 감지 기능은 PMI 서비스에서 사용할 수 있으며 최소 성능 오버헤드가 있는 정보를 기반으로 하는 알고리즘을 준수합니다.