메모리 이슈 발생
파일 업로드, 파일 다운로드 시 비정상적으로 메모리가 오르는 일이 생김 (1.4GiB 이상)
JVM 옵션 설정
-server -Xms512m -Xmx512m -XX:MetaspaceSize=400m -XX:MaxMetaspaceSize=400m
-Xms: Java heap 초기 크기
-XmX : Java heap 최대 크기
-XX:MetaspaceSize : 가비지 컬렉션을 처음 초과할 때 트리거할 할당된 클래스 메타데이터 크기
-XX:MaxMetaspaceSize : 클래스 메타데이터에 할당할 수 있는 최대 네이티브 메모리 양
HeapDump 분석
MAT(Memory Analyzer Tool)으로 메모리 분석
DB에 연결할 때 SSLSocketImpl에서 메모리 누수가 발생하는 것을 확인
DataBase의 SSL 설정 정보 확인
show status like '%ssl%';
DataBase 상태에서 ssl 암호화와 버전이 설정 되어 있지 않은 것을 확인 할 수 있음
Java에서 MySQL에 연결 할 때 디폴트 값으로 SSL을 사용하는 데 usessl=false로 설정하여 ssl을 사용하지 않으며 메모리 누수를 해결
jdbc:mysql://%s:%s/%s?serverTimezone=UTC&useSSL=false ...
메모리 누수는 해결 했지만 메모리가 비정상적으로 증가하는 현상을 해결 되지 않음
JVM 메모리
Java 프로세스의 메모리 영역은 크게 Heap Memory와 Native Memory 영역로 구성
이중에서 사용자가 크기를 설정할 수 있는 부분은 Java Heap과 Metaspace 영역이고 그 외 영역은 JVM과 OS 가 사용하는 영역
Java 옵션 설정으로 native memory tracking하여 메모리 사용 구조 파악
-XX:NativeMemoryTracking=summary
jcmd {pid} VM.native_memory
JVM native memory tracking으로 JVM이 임시 메모리(reserved) 값이 1336435KB 인걸 확인
JVM이 사용하는 실제 사용중인 메모리(committed)가 임시 메모리 크기 안에서 증가할 수 있음
Request Memory
쿠버네티스에서 노드 내 메모리가 충분하다면 컨테이너는 지정한 요청량보다 많은 메모리를 사용 할 수 있다
helm의 values.yaml에서 초기 cpu, memory 설정과 memory limits 설정
resources:
requests:
cpu: 300m
memory: 500Mi
limits:
memory: 1000Mi
memory limits 설정으로 최대 1000MiB를 넘지 않으며 메모리가 비정상적으로 오르는 현상을 해결
'ETC' 카테고리의 다른 글
센드 메일서버 구현 (0) | 2019.02.27 |
---|---|
마스터 네임서버 구축 (0) | 2019.02.26 |