실패록/오늘의 실패록

[실패록] EC2 카프카 메모리 리소스 부족

무토(MUTO) 2021. 2. 18. 11:45

0. 사건의 발단

  • 평화롭게 개발을 진행하던 도중 이슈가 발생했다. 갑자기 서버가 먹통이 되었다는 소식이었다.

  • 문제를 해결하기 위해 빠르게 ec2 인스턴스를 확인해 보았으나 cpu 사용량 및 인스턴스에는 문제가 없었다.

  • 다음은 putty로 ec2 터미널에 접속하여 top 명령어를 사용해 서버 메모리 사용량을 확인해 보았다

  • 결과는 놀라웠다...

분명히 시작할 때는 380m 메모리 리소스를 차지하고 있었지만 어느샌가 1.0g 0.9g 를 차지하고 있는 카프카 서버 

  • 내가만든 도커 이미지가 아니라 confluent가 제공하는 kafka 도커 이미지를 사용하는지라 어디서 메모리 누수가 발생하는지 파악을 할 길이 없다.

  • 내가 할 수 있는 옵션은 무엇이 있을까?

  1. 도커 실행시 jvm heap opts를 256-256으로 설정한다.
  2. 도커이미지를 confluent에서 만든 이미지가 아닌 다른 이미지로 변경한다.
  3. 일단 당장 돌아가도록 메모리 swap을 설정하여 메모리 여유분을 만들어둔다.

우선 당장 할 수 있는 일인 1번부터 진행해보자

kafka-dev:
    image: confluentinc/cp-kafka:5.5.1
    hostname: kafka-dev
    ports:
      - "9093:9093"
    environment:
      KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER_INTERNAL://kafka-dev:19093,LISTENER_DOCKER_EXTERNAL://{my-ip}:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER_INTERNAL
      KAFKA_ZOOKEEPER_CONNECT: "zoo-prod:2181,zoo-dev:2182,zoo-test:2183"
      KAFKA_BROKER_ID: 2
      KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO"
      KAFKA_HEAP_OPTS: "-Xmx256m -Xms256m"   //옵션 추가
    volumes:
      - ./zk-multiple-kafka-multiple/kafka-dev/data:/var/lib/kafka/data
    depends_on:
      - zoo-dev

  • 우선은 해당 옵션을 사용해서 문제를 일단락 시켰고 하루정도 시간이 지나 메모리 리소스 사용량을 확인하고 여전히 메모리 누수가 발생하는지 확인해보아야 한다. 제발 해당 옵션으로 문제가 해결되길 기도한다.

'실패록 > 오늘의 실패록' 카테고리의 다른 글

[실패록] Spring Controller 415 Error  (0) 2021.02.01