Skip to content

Instantly share code, notes, and snippets.

@siwonred
Created May 16, 2016 08:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save siwonred/f6db48621a61afc9ebd41988b4dcf9d6 to your computer and use it in GitHub Desktop.
Save siwonred/f6db48621a61afc9ebd41988b4dcf9d6 to your computer and use it in GitHub Desktop.
Storm Issue

2016.05.09 ~ 15 Storm 대란 사건

사건 발생 개요

  1. 카프카 도입과 함께 스톰 1.0.x 로 버전업 함
  2. 문제를 심플하게 하기 위해 SSID 토폴로지랑 Signal 토폴로지 중에서 리얼타임 기능을 주석 처리 함
  3. 처음에는 카프카 머신에서 스톰을 구동했음
  4. CPU를 많이 쓰는 문제인지, 카프카도 죽고 스톰도 죽는 문제 발견
  5. 카프카가 죽으면 문제가 너무 복잡해지기 때문에 스톰 머신을 카프카 머신에서 빼서 새로 설정 했음
  6. 이전 docker 가 스톰 0.8.x에 맞춰서 설정 됐고, nimbus, supervisor 등 각 인스턴스 별로 이미지가 별도로 있어서 관리 이슈가 있었음. 특히 슈퍼바이저의 경우 kill 커멘드가 씹히는 문제가 있어서 도커 리드플로이도 잘 안되는 문제가 있었음. 그래서 새로운 도커 이미지를 만듬. deploy 프로젝트 참고
  7. 도커로 스톰 1.0.0을 디플로이 했으나 signal topology 가 10분~1시간 정도 작업을 돌다가 처리량이 0이되는 문제 발견 (좀비 상태)
  8. 스톰 1.0.1로 업그레이드 함 => 문제 계속 됨
  9. 카프카 lib를 cdh꺼랑 다른걸 쓰는 문제가 있어서 수정 해 봄 => 문제 계속 됨
  10. max spout pending 값을 조절해 봄 => 문제 계속 됨
  11. 카프카의 zk 타임아웃이나 기타 설정들을 마구 수정해 봄 => 문제 계속 됨
  12. 각 인스턴스 별로 로그를 봤는데 아무 로그가 안찍힘 => 디버그를 키고 서밋 함 => 로그가 찍히나 에러나 기타 정보를 얻을 수 없었음
  13. 도커가 문제인가 싶어 위에 도큐멘트 대로 app4-6에 수동으로 storm을 인스톨함 => 문제 계속 됨
  14. 처리량이 0가 됐을 때 top을 찍어 봤는데 이상하게도 CPU가 높은 부분을 확인, 메모리 사용량이 스톰 워커당 기본 값 768에 육박하는거 확인
  15. 메모리 사용량을 높혀보니 (1기가) 더 천천히 좀비 상태가 되는 것 확인
  16. 스톰 기본 설정 값을 확인해보니 아래와 같이 다른 부분 확인 ipv4 사용을 위해서 기존에 우리가 사용하던 설정:
worker.childopts: "-Djava.net.preferIPv4Stack=true"

스톰 github에 있는 최신 설정 기본 값:

worker.childopts: "-Xmx%HEAP-MEM%m -XX:+PrintGCDetails -Xloggc:artifacts/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump"

(참고: https://github.com/apache/storm/blob/master/conf/defaults.yaml)

  1. 기본 설정 값에 GC에 관한 부분이나 Xmx 설정이 있는데 우리가 ipv4 쓴다고 덮어 쓴 것을 확인하고 아래와 같이 설정값을 세팅함
worker.childopts: "-Xmx%HEAP-MEM%m -XX:+PrintGCDetails -Xloggc:artifacts/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump -Djava.net.preferIPv4Stack=true"

또한 워커와 supervisor 메모리 설정을 아래와 같이 세팅:

worker.heap.memory.mb: 2048
supervisor.memory.capacity.mb: 30720

15시간째 좀비 상태 안되는 것 확인

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment