애플리케이션 코드 분석
코드 분석기를 실행하여 코드를 분석하고 인스트루먼트된 버전의 소스 코드를 작성할 수 있습니다. 이 분석은 Java® 모놀리식 애플리케이션을 파티션으로 리팩토링하는 첫 번째 단계입니다.
코드 분석기
코드 분석기는 파티션 권장사항을 생성하는 AI 엔진에 대한 입력으로 사용되는 Java 모놀리식 애플리케이션의 애플리케이션 코드에서 정적 데이터를 수집합니다. 이 정적 데이터는 배치된 애플리케이션에서 런타임 데이터를 수집하는 2진인스트루먼트에 대한 입력으로도 필요합니다. 코드 분석기가 Java 코드를 스캔할 때 네 개의 파일을 생성합니다. JSON 파일에는 스캔된 클래스에 대한 메타데이터 및 2진 인스트루먼터에 대한 구성이 포함되어 있습니다. 메타데이터에는 클래스 이름, 유형이 지정된 멤버 속성, 생성자, 입력 인수 및 리턴 유형이 있는 메소드, 클래스의 소스 파일 위치와 같은 정보가 포함됩니다.
또한 코드 분석기는 Java 모놀리식 애플리케이션의 소스 코드를 인스트루먼트하여 이러한 애플리케이션이 실행될 때 런타임 추적이 수집되도록 할 수 있습니다. 코드 분석기는 애플리케이션의 모든 Java 클래스를 스캔하여 생성자를 포함한 모든 클래스 메소드에서 System.err.println("Entering...") 및 System.err.println("Exiting...") 양식으로 인스트루먼테이션 명령문을 삽입합니다. 코드 분석기를 사용하여 코드 인스트루먼테이션을 완료한 후 Java 모놀리식 애플리케이션을 다시 빌드하고 다시 배치하십시오.
소스 코드 인스트루먼테이션은 코드 분석기의 더 이상 사용되지 않는 기능입니다. 2진 인스트루먼트 프로그램은 비즈니스 유스 케이스를 실행하는 동안 런타임 추적을 수집하는 데 권장되는 옵션으로, Java 모놀리식 애플리케이션을 다시 빌드하고 다시 배치할 필요가 없습니다.
전제조건
시스템 요구사항을 충족하는지 확인하십시오.
프로시저
Java 모놀리식 애플리케이션의 2진 아카이브 파일을 디렉토리 구조에 배치하십시오.
유효한 Java 아카이브 파일 형식은 .cba, .class, .ear, .eba, .jar및 .war입니다. 또한 Java 아카이브 2진파일을 포함하는 .rar 및 .zip 파일도 유효합니다.
애플리케이션의 2진 파일에 대해 코드 분석기를 실행하십시오.
analyze 명령을 실행하십시오. 명령 도움말을 가져오려면 -h 옵션을 추가하십시오.
mono2micro analyze -a <binary-file-path>다음 정보는 명령 구문에 대해 설명합니다.
<binary-file-path> 변수는 분석할 애플리케이션의 2진 파일에 대한 경로 이름입니다. 기본적으로 analyze 명령은 여러 JSON 파일이 있는 사용자 작업 디렉토리에 binary-file-mono2micro 라는 디렉토리를 작성합니다.
-o 옵션을 추가하여 생성된 JSON 파일의 출력 디렉토리 경로를 지정할 수 있습니다. 코드 분석기를 실행하는 사용자에게는 /<output-dir-path>/ 디렉토리에 대한 읽기 및 쓰기 액세스 권한이 있어야 합니다.
mono2micro analyze -a <binary-file-path> -o <output-dir-path>- 추적을 표준 출력 스트림으로 전송하는 2진 인스트루먼트에 대한 구성을 생성할 수 있습니다. 기본적으로 2진인스트루먼트 프로그램은 표준 오류 스트림에서 IBM Mono2Micro 런타임 추적을 생성하기 위해 Java 코드를
System.err.println()문으로 인스트루먼트합니다.--instrumentation-target옵션을out값으로 설정하면 mono2micro instrument 명령이 사용된 경우 소스 인스트루먼테이션에도 적용됩니다.
표준 오류 및 표준 출력 스트림 예제
표준 오류 스트림의 경우 다음 명령을 실행하십시오.
mono2micro analyze -a /apps/daytrader-ee7.ear
표준 출력 스트림의 경우 다음 명령을 실행하십시오.
mono2micro analyze -a /apps/daytrader-ee7.ear --instrumentation-target out
2진 분석을 위한 Java 패키지 목록 제어
2진 분석기는 기본적으로 제외된 패키지를 제외하고 2진파일 내의 모든 Java 클래스를 검사합니다. -h 옵션을 사용하여 제외된 패키지의 기본 목록을 확인할 수 있습니다.
com.test.app,org.xyz.lib,edu.abc
- --add-to-exclude-packages
- 제외할 패키지의 기본 목록에 패키지를 추가합니다. 2진 분석은 기본 목록 패키지를 제외하고 이 옵션으로 지정된 패키지 목록도 제외합니다.
- --exclude-packages
- 2진 분석에서 이 옵션으로 지정된 패키지 목록을 제외합니다. 사용자가 지정한 이 패키지의 클래스를 제외한 모든 클래스가 분석됩니다. 이는 기본 패키지 목록이 무시됨을 의미합니다.
- --include-packages
- 2진 분석 중에 이 옵션으로 지정된 패키지 목록만 분석합니다. 이러한 패키지의 클래스만 분석되므로 기본 패키지 목록은 무시됩니다.
- --analyze-all
- 모든 클래스 및 패키지를 강제로 분석합니다.
결과
분석이 성공적으로 완료되면 출력 디렉토리가 지정되지 않은 경우 코드 분석기는 다중 파일이 있는 사용자 작업 디렉토리에 binary-file-mono2micro 라는 디렉토리를 작성합니다. 여기서 binary-file 은 분석된 Java 2진파일의 이름입니다. 예를 들어, 2진파일이 daytrader-ee7.ear인 경우 코드 분석기는 사용자 작업 디렉토리에 이름이 daytrader-ee7-mono2micro 인 디렉토리를 작성합니다. 출력 옵션이 지정되면 JSON 파일이 제공된 디렉토리에 배치됩니다.
분석 후 디렉토리에는 다음 파일이 포함됩니다.
- symTable.json
- refTable.json
- instrumenter-config.json
- recommender-config.properties
symTable.json 및 refTable.json 파일에는 스캔된 클래스(예: 이름, 위치, 속성 이름, 생성자 및 메소드)에 대한 메타데이터가 포함됩니다. instrumenter-config.json 파일은 2진 인스트루먼테이션에 대한 구성을 제공합니다. recommender-config.properties 파일은 디스크에서 Java 애플리케이션 아카이브의 위치 및 분석 중에 제외되거나 포함된 패키지를 지정합니다.
소스 인스트루먼테이션이 코드 분석기에서 사용 가능한 경우, 피어 디렉토리에는 나중에 IBM Mono2Micro 런타임 추적을 생성하는 데 사용하는 System.err.println() 문으로 인스트루먼트된 소스 코드의 사본도 포함됩니다.
코드 분석기 인스트루먼테이션은 애플리케이션의 변수 값을 인쇄하지 않습니다. 인스트루먼테이션의 목적은 런타임 동안 모든 변수의 값이 아니라 클래스의 다양한 메소드 및 생성자를 통해 시간 플로우를 기록하는 것입니다.
현재의 한계
코드 분석기에 의해 인스트루먼트된 코드를 컴파일할 때 다음과 같은 상황이 발생할 수 있습니다.unreachable code컴파일 오류입니다. 일부 에지의 경우, 코드 분석기 인스트루먼테이션은 Java 컴파일러가 도달 불가능으로 발견하는 인스트루먼테이션 명령문을 삽입할 수 있습니다.
문제점을 해결하려면 연결할 수 없는 명령문을 제거하거나 주석 처리하십시오. 이러한 제거는 어떤 방식으로든 런타임 추적의 생성에 영향을 주지 않습니다.
코드 분석기를 실행할 때 Java 프로세스에서 메모리 부족 오류가 발생할 수 있습니다. 문제점을 해결하려면 큰 최대 힙 크기를 값으로 지정하여 --java-opts 환경 변수를 설정하십시오.
예를 들어, 최대 Java 힙 크기를 512MB로 지정하려면 다음 명령 중 하나를 실행하십시오.
mono2micro analyze -s <src-dir-path> --java-opts "-Xmx512m"mono2micro instrument -s <src-dir-path> --java-opts "-Xmx512m"- 2진 분석기가 동일한 이름과 동일한 패키지 이름을 갖는 둘 이상의 Java 클래스를 찾으면, 식별된 첫 번째 클래스를 분석하고 정확히 동일한 이름과 동일한 패키지 이름을 갖는 다른 클래스를 무시합니다. 동일한 클래스가 2진아카이브 내의 여러 2진파일에 패키지된 경우 중복 이름이 발생할 수 있습니다. 이 경우 발견된 중복을 보고하는 경고가 로그됩니다. 대부분의 경우 이는 문제가 되지 않습니다. 특히 발견된 클래스가 동일한 경우에는 문제가 되지 않습니다. 그러나 발견된 클래스의 구조에 차이가 있는 경우에는 문제가 될 수 있습니다.
다음에 수행할 작업
애플리케이션의 비즈니스 로직을 기반으로 하는 파티셔닝 권장사항을 가져오려면 인스트루먼테이션을 사용하여 Java 모놀리식 애플리케이션을 실행하여 런타임 추적 파일을 생성하십시오. 대신 애플리케이션의 정적 분석만을 기반으로 더 빠르게 추천을 받으려면 수집된 데이터를 확인한 다음 AI 엔진을 실행하세요. 코드 분석기, 선택 사항으로 바이너리 계측기 및 사용 사례 기록기의 정보를 AI 엔진의 입력으로 사용하여 파티션 권장 사항을 생성합니다. AI 엔진이 파티션 권장사항 단계 중에 추가로 분석할 수 있도록 Java 애플리케이션 아카이브 파일을 디스크의 동일한 위치에 보관하는 것이 중요합니다.
소스 인스트루먼테이션을 통해 런타임 추적 파일을 수집하도록 선택한 경우, 코드 분석기가 인스트루먼테이션 프로세스를 성공적으로 완료한 후 비프로덕션이지만 대표적인 환경에서 인스트루먼테이션된 애플리케이션을 빌드하고 배치할 수 있습니다. 원래 애플리케이션을 빌드 및 배치하는 데 사용하는 정확한 프로세스를 따르십시오. 환경에 따라 애플리케이션 및 인스트루먼트된 버전은 베어 메탈 머신, 가상 머신 또는 컨테이너에 있을 수 있습니다.