MSA 를 적용하며 github action, runner 여러개의 도커 컨테이너를 띄우다 보니 메모리 부족으로 서버가 에러가 생기는 현상, jvm 메모리 부족 이슈가 생겼습니다.
실행중엔 서버 접속 조차 되지않음
여러개의 레포지토리에 있는 runner 를 1개의 인스턴스에 전부 연결 되어있음
여러개의 Repository를 organizaion 으로 통합하여 관리 runner group 을 설정하여 1개의 러너로 실행
서버가 접속이 안되거나 급한 에러는 해결 하지만 JVM기반의 kafka, zookeeper 등 실행이 안되는 이슈 발생
jvm 기반의 kafka 와 zookeeper 메모리 이슈 발생
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Not enough space' (errno=12)
jvm 전에 비슷한 이슈가 있어서 다시 떠올려서 적용해봤습니다. 물론 전엔 ec2의 사양문제 였지만 지금은 cpu2개와 4gb의 메모리를 사용하고 있어 충분히 해결 가능 할 것이라 판단했습니다.
kafka와 zookeeper 의 환경변수를 넣어서 jvm heap 설정을 하였습니다.
container_name: zookeeper
ports:
- '2181:2181'
volumes:
- 'zookeeper_data:/bitnami'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
- JVMFLAGS=-Xmx512m -Xms512m
container_name: kafka
ports:
- '9092:9092'
volumes:
- 'kafka_data:/bitnami'
environment:
- KAFKA_HEAP_OPTS=-Xmx512m -Xms512m
JVM Heap을 설정하여 메모리를 조절하여 이슈는 해결됐지만 근본적인 이슈 해결은 아니라고 판단하고 kafka의 성능을 낮추는거기 때문에 좋은 해결방안이라고도 생각하지 않습니다.
jvm heap 설정하는방법 외에 여러가지 방법이 있겠지만 현재 이상태에서 당분간 docker 가 더 늘어나지 않을것이라 판단했고 그 기간동안 kubernates 를 학습하여 적용하고자 합니다.
기존의 free tier에서 스왑설정으로 성능을 약간 향상시킨 경험이 있지만 확인해보니 swap가능한 메모리도 없고 cpu2개 4gb 의 램 을 가지고있어 성능 최적화를 하면 충분히 가능하다고 생각하였습니다. 물론 현재방법이 가장 좋은방법이라고 생각하지 않습니다. 쿠버네티스로 컨테이너를 관리한다면 더욱 효과적으로 관리할것이고 메모리도 더욱더 효율적으로 관리 가능할 것이라 생각합니다.
추가적으로 쿠버네티스를 적용하며 메모리 설정의 변화를 비교해볼 예정입니다. 추후 적용 후에 수정 하겠습니다.