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 결과