ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ES, Flink, Kafka, Solr remote debugging 하기
    개발하면서/etc 2020. 7. 5. 22:44
    반응형

    가끔 오픈 소스에 적용된 기능을 소개한 문서와 코드를 보면서 동작 과정을 알아보고 실무에
    써볼 만한 게 있는 부분이 있다면 시험하곤 한다.

    개인적으로 효과적인 데이터 저장, 처리 조회에 대한 관심이 있어서 제목에 나열한 오픈소스를 보고 있는데
    문서와 코드 읽기만으론 이해하기 힘든 경우가 있다.

    이때 실제 돌려보면서 stacktrace나 break point 걸고 변수 값을 확인하면 이해가 쉽게 되는데
    해당 글에서는 JVM 오픈소스들을 어떻게 디버깅 하는지 간단하게 정리했다.
    (방법은 비슷하고 어느 부분에 -agentlib 옵션을 추가할지 정도이다.)

    ES

    공식 블로그에 정리되어있는데 7.5.1에서는 잘 동작하지 않아 실행 시 -agentlib 옵션 추가하는 걸로 진행했다.

    $> git clone https://github.com/elastic/elasticsearch --branch v7.5.1 --single-branch 명령어로 ES 다운로드 받고
    IntelliJ로 임포트 한 후 터미널에서 $>./gradlew run 실행한다 (IntelliJ 임포트 시간이 꽤 걸린다)

    터미널에 99% EXECUTING... 메시지가 보이면 취소를 누르고 build/elasticsearch-distros/extracted_elasticsearch_7.x.x-SNAPSHOT_archive_darwin_default/elasticsearch-7.5.1-SNAPSHOT로 이동한다.

    config/jvm.options 맨 아랫줄에 -agentlib 옵션을 추가하고 bin/elasticsearch 실행한다.

    IntelliJ에서 Remote 세팅하고 디버깅 실행하면 끝!!!

    ※ 몇 버젼부터인지 모르겠지만 위 과정 없이 Elasticsearch Home에서 아래 명령어 실행 후 원격 디버깅 하면 된다.
    $> ./gradlew :run --debug-jvm

    Flink

    flink-conf.yaml에-agentlib 옵션을 추가해 실행하고 Intellij를 이용하여 remote debugging 하는 방법이다.

    https://cwiki.apache.org/confluence/display/FLINK/Remote+Debugging+of+Flink+Clusters

    Flink 세팅은 어려워서 문서 첨부만... :bow:

    Kafka

    https://kafka.apache.org/downloads 에서 관심 있는 버전을 다운받고 압축을 푼다. (2.4.1로 진행)

    바로 kafka server 실행하면 jar 먼저 빌드하라는 메시지를 보게 되는데 당황하지 말고 알려준 명령어를 실행한다.

    빌드 완료 확인 후 다시 실행하면 잘 동작한다.(주키퍼 접속 재시도 중...)

    IntelliJ로 kafka-2.4.1-src 프로젝트를 임포트하고 Remote 설정을 넣어준다.

    add remote configuration

    IntelliJ remote 추가할 때 나왔던... for remote JVM 잘 복사해서 bin/kafka-server-start.sh 아래 부분에 붙여 넣고 suspend=n을
    suspend=y로 변경하고 DEBUG 옵션이 실행할 때 포함되도록 수정한다.

    $> bin/kafka-server-start.sh config/server.properties 실행하면 Listen... 상태에서 멈춰있고
    IntelliJ에서 Kafka Server를 디버깅 실행하면 Tada~~~

    TimingWheel 파악할 때 많은 도움 됐다.  Kafka purgatory, Kafka Purgatory(1)

     

    Solr

    http://visitamaresh.com/debug-solr-cloud-remote-and-local/

    명령어로 lucene-solr 코드 다운 받고 빌드 및 명령어 실행
    $> git clone https://github.com/apache/lucene-solr --branch
    releases/lucene-solr/8.5.2 --single-branch
    $> cd lucene-solr && ant ivy-bootstrap ant idea
    $> cd solr && ant server && ant dist && ant package
    $> bin/solr start -a "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005" -e cloud

    IntelliJ import 하고 Attach to Process로 solr 프로세스 선택하면 된다.
    ※ 초기 세팅시 엔터만 쳤더니 노드가 두개 생성이 됐다. 디버깅을 위해 노드 한개만 생성(링크에도 설명했는데 못봄 -_-;;)

     

    JVM 프로젝트들을 소스로 직접 실행하는 것도 시도했지만 사용되는 argument가 다양해서 remote debugging으로 하는 게 편하다.

    다운로드한 코드를 idea에 import와 빌드하고, 터미널에서 -agentlibxxx이 포함되도록 명령어 실행,
    마지막으로 idea에서 remote debugging 하면 끝!!

    반응형

    댓글

Designed by Tistory.