일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- React
- 초기 세팅
- JPA
- header setting
- java8
- dto valid
- 헤더 설정
- 초기 구축
- CentOS6
- memcached
- custom valid
- java9
- jvm
- MySQL
- 도커
- SpringBoot
- ollama langflow
- spring
- docker 설치
- jpa entity자동
- Java
- 리눅스
- JavaScript
- generate pojos
- Next.js 14
- generate entity
- swagger
- NextJS
- docker
- spring boot
- Today
- Total
개발자의 길
리눅스 JVM heap memory 모니터링하기(Jstat) 본문
특정 프로세스에 대해 CPU 및 Memory 사용률을 확인하기 위해
top, sar, jstat 등의 명령을 자주 사용하게 되는데 그 중 파라미터도 길고 잘 안익혀지는 jstat 에 대하여
깔끔하게 정리된 글이 있어 남겨본다.
1. jstat 수행 방법
- 우선 모니터링 하고자 하는 프로세스의 ID 를 확인합니다.
확인하는 방법은 ps -ef | grep java 로 확인을 해도 되고,
프롬프트 상태에서 jps 라고 입력한 뒤 엔터를 치면 해당 JVM에서 수행된 프로세스의 ID를 보여줍니다.
(jps 사용시에는 PATH에 해당 JDK가 설정되어 있어야 합니다.
- 두번째로 jstat 명령을 수행 합니다.
jstat -gcutil -h20 -t 7251 3000 3000
-> gcutil : gcutil 에 대해서 수행
-> -h20 : 20라인마다 header 찍음
-> -t : time stamp 프린트(JVM 이 스타트 된 이후의 시간)
-> 7251 : 프로세스 id
-> 3000 : interval (ms 단위)
-> 3000 : count
2. 각각의 항목 설명
- S0 : Survivor 영역 0 의 사용율 (현재의 용량에 대한 퍼센티지)
- S1 : Survivor 영역 1 의 사용율 (현재의 용량에 대한 퍼센티지)
- E : Eden 영역의 사용율 (현재의 용량에 대한 퍼센티지)
- O : Old 영역의 사용율 (현재의 용량에 대한 퍼센티지)
- P : Permanent 영역의 사용율 (현재의 용량에 대한 퍼센티지)
- YGC : Young 세대의 GC 이벤트수
- YGCT : Young 세대의 가베지 콜렉션 시간
- FGC : 풀 GC 이벤트수
- FGCT : 풀 가베지 콜렉션 시간
- GCT : 가베지 콜렉션총시간
3. 샘플
>jstat -gcutil 21891 250 7
S0 S1 E O P YGC YGCT FGC FGCT GCT
12.44 0.00 27.20 9.49 96.70 78 0.176 5 0.495 0.672
12.44 0.00 62.16 9.49 96.70 78 0.176 5 0.495 0.672
12.44 0.00 83.97 9.49 96.70 78 0.176 5 0.495 0.672
0.00 7.74 0.00 9.51 96.70 79 0.177 5 0.495 0.673
0.00 7.74 23.37 9.51 96.70 79 0.177 5 0.495 0.673
0.00 7.74 43.82 9.51 96.70 79 0.177 5 0.495 0.673
0.00 7.74 58.11 9.51 96.71 79 0.177 5 0.495 0.673
이 예의 출력은, Young 세대의 콜렉션이 3 번째와 4 번째의 샘플간에 행해진 것을 나타내고 있습니다.
콜렉션에는 0.001 초 걸리고 있어 오브젝트가 Eden 영역 (E)으로부터 Old 영역 (O)에 승격했기 때문에,
Old 영역의 사용율은 9.49% 에서 9.51% 에 증가하고 있습니다.
Survivor 영역은, 콜렉션전은 12.44% 가 사용되고 있었습니다만, 콜렉션 후는 7.74% 밖에 사용되고 있지 않습니다.
실시간으로 메모리 사용을 좀 확인해야 하는 상황에서는 위와 같이 jstat 로 간단하게 모니터링을 수행하면
현재의 JVM 메모리 사용 상황을 확인이 가능할 것 같습니다.
가장 정확한 건 GC 로그를 별도의 파일로 출력하게 해서 분석하는 것이지만, 이럴 경우에는 실시간으로 확인이 힘들기 때문에
위와 같이 사용하는 것도 괜찮은 방법 중의 하나일 것 같습니다.
물론 JVM 에 계속 request 를 보내기 때문에 부하가 있을 듯 하지만, 지금 생각으로는 크게 영향은 미치지 않을 듯 하네요..
영향이 고려되면 interval을 좀 조정하든지 하면 될 듯 합니다.
'6. 리눅스' 카테고리의 다른 글
shell(bash) 기초 문법 요약 (0) | 2019.11.26 |
---|---|
[리눅스] CentOs 6 nodejs/npm 설치 하기 (12) | 2019.11.01 |
Apache MPM(prefork,worker) 최적화 테스트 (2) | 2019.07.16 |
Jenkins 배포 쉘(shell) 및 프로젝트 자동 start (4) | 2019.01.23 |
리눅스 서버 상황 파악 (0) | 2018.04.04 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.