>source

사용률이 높은 6노드 Cassandra 클러스터가 있습니다. 우리는 노드에서 최대 50초가 걸릴 수 있는 가비지 수집기 중지 세계 이벤트를 많이 처리해 왔습니다. 그 동안 Cassandra 노드는 응답하지 않고 새 로그인을 수락하지도 않습니다.

추가 세부정보:

  • 카산드라 버전: 3.11
  • 힙 크기= 12GB
  • 기본 설정으로 G1 Garbage Collector를 사용 중입니다.
  • 노드 크기: CPU 4개 28GB RAM
  • G1 GC 동작은 모든 노드에서 동일합니다.

도움을 주시면 대단히 감사하겠습니다!


편집 1:

객체 생성 통계를 확인해보니 전혀 건강해보이지 않습니다.


수정 2:

Chris Lohfink가 제안한 설정을 사용하려고 시도했으며 다음은 GC 보고서입니다.

CMS 제안 설정 사용

G1 제안 설정 사용

동작은 기본적으로 동일합니다.

  1. 구세대가 차기 시작합니다.
  2. GC는 전체 GC 및 STW 이벤트 없이는 제대로 정리할 수 없습니다.
  3. 전체 GC는 노드가 완전히 응답하지 않을 때까지 시간이 더 오래 걸리기 시작합니다.

최대 파티션 크기 및 읽기당 삭제 표시에 대한 cfstats 출력을 최대한 빨리 가져와서 게시물을 다시 편집하겠습니다.

GC가 증가하면 힙이 증가하므로 애플리케이션에 단순히 더 많은 메모리가 필요하거나 누수가 발생하거나 카산드라가 G1이 따라갈 수 없는 방식으로 할당을 버스트하는 방식으로 구성됩니다. 이러한 경우는 해당 차트만으로는 구별할 수 없습니다.

the84722021-11-24 23:07:20

현재 GC 설정은 무엇입니까?

Chris Lohfink2021-11-24 23:07:20

읽기당 최대 파티션 크기와 삭제 표시에 대한 cfstats 출력을 포함할 수 있습니까? 삭제 표시를 검색하고 큰 파티션 인덱스를 역직렬화하는 것은 높은 개체 할당 비율의 일반적인 원인입니다. 또한 위의 의견, 현재 설정을 모르면 GC를 개선하는 방법을 말하기 어렵습니다.

Chris Lohfink2021-11-24 23:07:20

@ChrisLohfink 기본 G1 GC 설정을 사용하려고 했고 XX:MaxGCPauseMillis로 게임을 했지만 아무 것도 변경되지 않았습니다. G1 및 CMS에 대한 권장 설정을 사용하여 GC 보고서와 함께 게시물을 편집했으며 귀하가 요청한 정보를 최대한 빨리 얻을 것입니다.

Scudeler2021-11-24 23:21:44

@the8472 메모리 누수처럼 보입니다(plumbr.eu/blog/memory-leaks/...). 제가 확인할 수 있는 Cassandra 설정의 예를 들어 주시겠습니까?

Scudeler2021-11-24 23:21:44
  • 답변 # 1

    기존 설정이나 가능한 데이터 모델 문제가 무엇인지 모른 채, to-space가 충분하지 않아 대피 일시 중지를 줄이기 위해 사용할 수 있는 몇 가지 보수적인 설정을 추측합니다(gc 로그 확인).

    -Xmx12G -Xms12G -XX:+UseG1GC -XX:G1ReservePercent=25 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:MaxGCPauseMillis=500 -XX:-ReduceInitialCardMarks -XX:G1HeapRegionSize=32m
    

    이는 또한 데이터 모델에 따라 문제가 될 수 있는 G1HeapRegionSize를 설정하여 문제가 되는 업데이트 기억 세트의 일시 중지를 줄이고 거대한 개체를 줄이는 데 도움이 될 것입니다. -Xmn이 설정되지 않았는지 확인하세요.

    C*가 있는 12Gb는 그 가치 때문에 CMS를 사용하는 데 더 적합할 것입니다. 확실히 더 나은 처리량을 얻을 수 있습니다. 할당될 수 있는 다소 큰 개체로 시간이 지남에 따라 조각화에 주의해야 합니다.

    -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=55 -XX:MaxTenuringThreshold=3 -Xmx12G -Xms12G -Xmn3G -XX:+CMSEdenChunksRecordAlways -XX:+CMSParallelInitialMarkEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSWaitDuration=10000 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCondCardMark
    

    데이터 모델이나 프로비저닝 부족에 문제가 있을 가능성이 높습니다.

  • 답변 # 2

    Zing을 사용해 보셨나요? Zing은 Cassandra 노드 및 클러스터에서 모든 GC 관련 결함을 근본적으로 제거하므로 이와 같은 Cassandra 상황은 고전적인 사용 사례입니다.

    JavaOne()의 최근 "GC 이해" 강연에서 방법/이유에 대한 세부 정보를 볼 수 있습니다. 또는 Cassandra 관련 결과를 보려면 슬라이드 56-60으로 건너뛰십시오.

  • 이전 ios : ARKit의 ChromaKey 비디오
  • 다음 html : 사이드바 축소를 선형으로 만들고 수직 오정렬 방지