CLOSE_WAIT & TIME_WAIT 최종 분석

2016-04-21 KENNETH 0

CLOSE_WAIT & TIME_WAIT 최종 분석 트래픽이 많은 웹 서비스를 운영하다보면 CPU는 여유가 있지만 웹서버가 응답을 제대로 처리하지 못하고 먹통이 되는 경우를 종종 보게 됩니다. 여러가지 이유가 있겠지만, 이 글에서는 가장 대표적인 경우인 CLOSE_WAIT 상태를 재현하고 원인과 문제점 그리고 해결책을 알아봅니다. 나아가 TIME_WAIT의 동작 과정을 직접 만든 예제와 리눅스 커널 소스를 통해 확인하고, 인터넷에 퍼진 낡은 그래서 더이상 유효하지 않은 정보들을 바로 잡습니다. Part I. CLOSE_WAIT CLOSE_WAIT로 인한 서버 행업 현상 서버 부하 테스트 과정 중 일정 시간이 경과하면 점점 더 느려지면서 행업 상태에 빠지는 경우가 생겼습니다. 부하가 높으면 느려지는건 당연한 일이지만, 더 골치아픈 문제는 테스트가 끝나도 행업 상태에서 복구되지 않았다는 점입니다. 이는 담당자가 매 번 상태를 확인하고 복구해야 함을 뜻하며 서비스에는 도입할 수 없을 정도로 치명적입니다. 분명히 특정한 원인이 있을 것이며 그에 따른 적절한 해결책이 존재할 것입니다. 먼저 행업 직전, 8080으로 서비스 중인 포트 상황은 아래와 같습니다: $ lsof -i:8080 [ more… ]

No Image

모빌(MoBiL) – kakao의 모바일앱 CI/CD 플랫폼

2016-04-21 KENNETH 0

모빌(MoBiL) – kakao의 모바일앱 CI/CD 플랫폼 하나의 모바일 앱이 마켓에 출시되기까지는 수많은 빌드와 배포 과정을 거치게 됩니다. 더 자주, 더 빠르게, 더 높은 품질의 서비스를 출시하기 위해서는 효율적인 빌드와 배포는 필수적입니다. 카카오에는 모바일 앱을 지속적으로 통합(Continuous Integration)하고 지속적으로 배포(Continuous Delivery)하기 위해 자체 개발한 플랫폼 모빌(MobiL)이 있습니다. 이 글에서는 모빌이 어떻게 개발되었고, 어떻게 활용되고 있는지를 소개합니다. 모빌의 시작 모빌의 초기 버전은 2013년에 개발이 시작되었습니다. 당시 서버 애플리케이션의 빌드와 배포는 자동화가 많이 적용된 상황이었지만 모바일 앱은 그렇지 않았습니다. 일부 조직에서는 Jenkins를 이용해 CI 환경을 구축했지만, 대부분은 로컬 빌드 후 수동 배포하는 경우가 많았습니다. 사내 배포 방식 또한 메일, 메신저, JIRA, 리모트 저장소 등 다양했습니다. 이렇게 빌드부터 배포까지 전체 릴리스 과정이 통합되어 있지 않다 보니 비효율적인 부분들이 많았고, 개발자와 QA담당자 사이의 커뮤니케이션 비용이 많이 발생하고 있었습니다. “빌드와 배포 과정에서 비효율적인 부분들을 제거하고 자동화를 통해 전체 릴리스 과정이 매끄럽게 진행될 수 있다면 높은 품질의 [ more… ]

MySQL InnoDB의 Adaptive Hash Index 활용

2016-04-08 KENNETH 0

MySQL InnoDB의 Adaptive Hash Index 활용 개요 MySQL의 InnoDB에는 Adaptive Hash Index 기능이 있는데, 어떤 상황에서 효과가 있고 사용 시 반드시 주의를 해야할 점에 대해서 정리하도록 하겠습니다. InnoDB B-Tree 인덱스 MySQL의 InnoDB의 대표적인 인덱스는 B-Tree입니다. 데이터는 Primary Key 순으로 정렬되어 관리되고, Secondrary Key는 인덱스키+PK를 조합으로 정렬이 되어 있습니다. 즉, 특정 데이터를 찾기 위해서는 Secondrary Key에서 PK를 찾고, 그 PK를 통해 다시 원하는 데이터로 찾아가는 형태로 데이터가 처리 됩니다. 트리의 가장 큰 강점은 데이터 접근 퍼포먼스가 데이터 증가량에 따라서도 결코 선형적으로 증가하지 않다는 점에 있습니다. 참고로, PK 접근 시 데이터 접근에 소요되는 비용은 O(logN)이고,두번 트리에 접근하는 Secondrary Key에 소요되는 비용은 2 * O(logN)입니다. 데이터가 아무리 많아져도, 데이터 접근에 소요되는 비용이 크게 증가되지 않음에도, 상황에 따라 효율이 좋지 않습니다. 자주 사용되는 데이터 탐색에도 매번 트리의 경로를 쫓아가야 한다는 것이죠. 게다가 Mutex Lock이 과도하게 잡히게 되면, 적은 데이터 셋에도 불구하고 DB 자원 사용 [ more… ]

No Image

Weekly Links #1 – 2016년 4월 첫째주

2016-04-08 KENNETH 0

Weekly Links #1 – 2016년 4월 첫째주 Weekly Links에서는 지난 한 주, 카카오의 기술 블로그 담당자가 구독하는 기술 뉴스레터들에서 “인간의 눈”으로 선별한 링크들을 짧은 코멘트와 함께 공유합니다. 포함된 뉴스레터 목록은 awesome-tech-newsletters에서 확인하실 수 있습니다. 2016년 4월 첫째주 추천 링크 Why we chose Akka for our Cloud Device solution – 사탕깨는 모바일 게임으로 유명한 King이 “Cloud Device Solution”을 만들기 위해 Akka를 도입한 과정. 스프링 부트에서 넷플릭스 오픈소스 활용하기 1부 eureka 2부 hystrix 3부 feign 분위기로 봐선 몇 편 더 나올 듯~ Building a lexer and parser with Scala’s Parser Combinators – 스칼라의 표준 라이브러리 Parser Combinators를 활용해서 DSL 인터프리터 만들기. 표준 라이브러리가 이 정도라니… 스칼라 좀 짱인 듯~ The decorator pattern in JavaScript using closures, monkey patching, prototypes, proxies and middleware – 자바스크립트의 클로저를 사용하는 데코레이터 패턴 5가지: 래퍼, 몽키 패치, 프로토타입 상속, 프록시, 미들웨어. 패턴도 공부하고 클로저도 공부하고~ 글이 꽤 [ more… ]

kakao의 오픈소스 Ep4 – HBase Tools

2016-03-24 KENNETH 0

kakao의 오픈소스 Ep4 – HBase Tools “카카오의 오픈소스를 소개합니다” 네번째는 terence.yoo와 동료들이 개발한 HBase Tools입니다. [HBase Tools]는 카카오에서 대규모 HBase 클러스터를 운영하면서 만들어진 도구들을 하나로 묶은 것입니다.​ HBase 주요 버전별 빌드를 제공하고 있어서 가져도 쓰기도 좋지만, HBase의 부실한 도구들 때문에 고생하셨던 분들에겐 나만의 HBase 도구를 만드는 좋은 시작점이 될 것입니다. 1. hbase-tools 소개 툴을 사용하면 HBase 운영 작업의 효율성이 좋아집니다. 카카오에서 사용하는 대표적인 툴 세 가지는 HBase Shell, HBase Web UI, Cloudera Manager Express Edition(이하 CM)입니다. 이 툴들은 매우 우수하지만, 꼭 필요한 기본적인 기능들만 제공합니다. 그래서 그런 기본적인 기능들을 코딩을 통해 이리저리 조합해서 사용해야 하는 경우가 많습니다. 심지어 어떤 기능들은 유료 버전에서만 사용가능 한 것들도 있습니다. 이런 부족한 부분을 채우기 위해서 툴을 하나, 둘 만들었습니다. 툴들이 여럿 쌓이다 보니 관리가 불편하게 되었고, 관리를 편하게 하기 위해서 하나로 모은 것이 hbase-tools입니다. hbase-tools는 세 가지 모듈로 이루어져 있고, 각 모듈 별 주요 [ more… ]