[Java] Java application과 메모리(CPU/GPU) 간의 관계

Hyo Kyun Lee·2024년 10월 19일
0

Java

목록 보기
54/66

1. 개요

성능 개선 작업을 진행하면서, 특히 대용량 통계 데이터 산출 시 작업관리자의 CPU와 GPU 점유율이 들쭉날쭉하는 것을 보면서 Java application과 운영체제의 관계에 대해 생각해보았다.

2. Java application과 메모리 간의 관계

기본적으로 Java application은 OS로부터 메모리를 할당받고, 힙메모리와 스택메모리를 사용하여 로직을 실행한다.

또한 조회를 할때마다 연산이 복잡하다면 Java application은 이를 컴퓨팅하기위해 당연히 CPU와 이를 도와줄 GPU를 사용하여 연산하게 된다.

따라서, JVM(WAS)사용률이 낮다고 하더라도 반대로 CPU 및 GPU 점유율은 높을 수 있기 때문에 CPU,GPU 상태도 같이 보면서 메모리 부하나 누수 여지가 있는지 확인하는 것이 중요하다.

3. 사소한 System.out.println 이라도 메모리를 고려하면서 작성하는 것이 좋다.

System.out.println은 커널을 통해 CPU의 자원을 할당받게 된다.

즉 불필요한 프린트가 메모리 점유율만 높여 성능에 안좋은 영향을 미칠 수 있다는 의미이다.

차라리 로그를 사용하거나 디버깅 후 불필요한 메시지 처리는 삭제하는 것이 좋다.

4. 참고자료

대용량 통계 조회와 메모리 - https://coor.tistory.com/46, https://flowlog.tistory.com/m/98#google_vignette
JVM 점유율이 낮아도 CPU는 높을 수 있음 - https://www.cisco.com/c/ko_kr/support/docs/wireless/quantum-policy-suite-wi-fi/119010-technote-jstack-00.html
CPU/GPU - https://aws.amazon.com/ko/compare/the-difference-between-gpus-cpus/
CPU 과부하(커널 및 자원할당) - https://m.blog.naver.com/PostView.naver?blogId=hanajava&logNo=221720961020&proxyReferer=https:%2F%2Fwww.google.co.kr%2F&trackingCode=external

0개의 댓글