반응형

작성한 프로그램이 정상적으로 수행이 되고 메모리 낭비는 없는지? 생성한 Thread가 잘 동작하다가 문제없이 삭제되는지 등 여러가지 JAVA에서 생성된 스펙을 확인하고자 할때, JConsole을 통해 좀 더 유용하게 확인 할 수 있습니다.

 

 

Netty Client를 통해 여러 곳에 메시지를 처리해야 하는 상황이였는데, 이부분을 생성자를 통해 각각 필요할때마다 불러와서 new 생성자를 통해 처리하였습니다.

 

Netty에는 EventLoop가 Thread로 동작하게 되어 있는데, 생성된 이 group들을 별도로 종료하지 않으면 was가 종료되기 전까지 계속 살아있게되고 이상태로 서비스가 운영된다면 추후에는 Memory Leak과 같은 현상이 발생하면서 was가 죽어버리는 끔찍한 일이 발생할 수 있습니다.

 

JConsole

1. JConsole 실행하기

- 설치한 자바 위치의 bin디렉토리에 JConsole이 있습니다.

- 환경변수를 잡았다면 cmd창에 JConsole을 입력합니다.

JConsole입력

실행해줍니다.

 

2. JConsole 확인할 Java 프로세스 선택하기

JConsole이 동작하고 확인할 java프로세스를 선택하라고 뜹니다.

여기서 확인하고 싶은 클릭하고 프로세스를 연결합니다.

 

3. 경고창 확인

경고창이 뜨면 Insecure connection을 누릅니다.

 

4. 원하는 탭에서 사용

여러가지 탭

메모리에서 현재 사용하는 메모리 사용량

Threads에서 동작중인 Thread리스트 등등 각각 원하는 탭에서 상태를 확인하시면 됩니다.

 

5. 저는 Thread가 정상적으로 동작하고 종료되는 모습을 확인하기 위해 Threads탭을 클릭합니다.

Thread개수와 사용중인 Thread리스트가 나오고 Thread를 클릭하면 상세정보가 나옵니다.

 

해당 소스에서는 shutdownGracefully(); 처리가 없는 상태로 nioEventLoopGroup이 사용할때마다 추가되고 있는 모습을 볼 수 있습니다.

 

6. shutdownGracefully();를 통해 Thread 종료 처리 후 확인하기

특정 행위가 만족되면서 new NettyClient에 의해 EventLoop가 생성으로 Threads에 항목이 추가되고, 추후 종료동작에서 Shutdown으로 인해 EventLoop에서 사라지는걸 볼 수 있습니다.

반응형