Dev/기타

VisualVM을 이용한 JVM 모니터링

코딩하는 백구 2021. 8. 9. 22:14

로직

1. VisualVM 설치 (VMX port 추가해서 WSL과 연결)
2. 연결된 참조가 없는 데이터들을 무한 대량 생성
3. 가비지 컬렉션이 작동 X
4. 힙 영역이 다 차면서 프로그램 종료

 

Code

import com.beust.jcommander.JCommander;
import com.beust.jcommander.ParameterException;

import java.util.ArrayList;
import java.util.List;

public class HelloWorld {
    static class Sample{
        String name;
        public Sample(String name) {
            this.name = name;
        }

        public void Sample(String name){
            this.name = name;
        }
    }

    public static void main(String args[]){

        Args param = new Args();
        JCommander jCommander = new JCommander(param);

        try{
            jCommander.parse(args);
            String profile = param.getProfile();

            List<List<Sample>> sampleList = new ArrayList<>();

            while(true){
                try{
                    Thread.sleep(1000);
                    ArrayList tempList = new ArrayList<Sample>(10000000);
                    tempList.add(new Sample(profile));
                    sampleList.add(tempList);
                }catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }


        }catch (ParameterException e){
            JCommander.getConsole().println(e.toString());
            jCommander.usage();
        }
    }
}

 

WSL 명령어

java -verbose:gc -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=3030 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -cp HelloWorld2.main.jar HelloWorld --profile 지연

 

실행 결과

1) Local

2) WSL

 

VisualVM 결과