2016-09-09 8 views
0

최근에 여러 클러스터에서 Apache Storm 작업자에 대해 GC 로깅을 활성화하기로 결정했습니다 (정확한 버전은 다양합니다). 토폴로지 관련 메모리 및 가비지 수집 문제 , 근로자가 로그 파일 덮어 쓰기 및 디스크 공간 사용 제한을 방지하면서 Apache Storm 작업자에게 GC 로깅을 활성화하는 방법

  • 로그가 너무 많은 디스크 공간을 사용하여 어떤 이유로 다시 시작할 때 로그 파일의

    • 덮어 쓰기 : 우리는 노동자 그렇게하기를 원하지만 우리는 또한 우리가 발생할 수 알고이 문제를 방지하려면 디스크로 이어지는 것은 채워지고 자바 GC 로깅은 에 보이는 프로세스가 시작되면

    모든 파일의 내용 교체 (관리하지 않는 한 당신은 충분히 실행하는 클러스터를 유지하는 경우, 디스크를 채울 로그 파일) 그 같은 이름입니다. 즉, 조심하지 않으면 GC 로깅을 잃어 버릴 수 있습니다. 아마도 필요할 가능성이 가장 높을 때입니다.

  • 답변

    1

    storm.yaml의 worker.childopts 속성을 통해 Storm 작업자에 대한 JVM 옵션을 설정할 수 있습니다 (Apache Ambari를 통해 Storm을 관리하는 경우 Storm 서비스> configs> advanced storm-site> worker.childopts를보십시오). 추가 JVM 등록 정보를 추가하게됩니다.

    파일에 GC 로깅을 사용하려면 -verbose:gc -Xloggc:<log-file-location>을 추가해야합니다.

    덮어 쓰기를 방지하려면 로그 파일 이름을 특별히 고려해야합니다. 모든 호출에 대해 고유 한 이름을 지정해야하는 것처럼 보입니다. 이를 위해 Storm code documentation에 언급 된 특수한 "%"문자열 교체를 활용하십시오. 유일성을 위해 %WORKER-ID%이면 충분합니다. 각 작업자 프로세스마다 고유합니다. GC 로그가 필요한 토폴로지를 쉽게 알 수 있기를 원할 수도 있습니다. 이 경우 %TOPOLOGY-ID%을 추가하십시오 (예 : Storm의 일부 구 버전 %ID%). 그것은 길지만 토폴로지의 이름을 제공합니다.

    지금까지 JVM 옵션은 -verbose:gc -Xloggc:/var/log/storm/storm-worker-%TOPOLOGY-ID%-%WORKER-ID%-gc.log (-%TOPOLOGY-ID%은 선택 사항이며 경로는 사용자의 스톰 로깅 디렉토리와 일치해야하며 원하는 경우 로그 파일의 이름을 다르게 지정할 수 있음).

    이제 디스크 공간 사용을 관리하십시오. 내가 가지고있는 것보다 더 간단한 방법이 있다면 나는 행복 할 것이다.

    먼저 Java의 내장 GC 로그 파일 순환을 이용하십시오. -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M은 JVM에서 최대 10 개의 GC 로그 파일 (각 파일의 크기가 10MB 이하)을 사용하여이 순환 게재를 사용하는 예입니다. 10 x 10MB는 최대 100MB입니다. 이 작업자 인스턴스 당 있습니다.

    GC 로그 파일을 최대 10 개까지 회전 시키면 Xloggc에서 지정한 파일 이름에 '.0', '.1', ... '.9'이 추가됩니다. .0이 먼저 나오고 .9에 도달하면 .0을 대체하고 라운드 로빈 방식으로 계속 진행합니다. Java의 일부 버전에서는 .current가 현재 쓰여지고있는 로그 파일의 이름 끝에 더 추가됩니다.

    덮어 쓰기를 방지하기 위해 추가해야하는 고유 한 파일 이름 지정으로 인해 작업자 프로세스 당 100MB의 프로세스 호출이 가능하므로 폭풍우 작업자 자식 GC 로그에서 사용되는 디스크 공간을 관리하는 토탈 솔루션이 아닙니다. 각 프로세스에 대해 최대 10 개의 GC 로그 파일 집합으로 끝나게됩니다. 가장 좋은 해결책은 logrotate 유틸리티 을 사용하여 마지막 N 일 동안 수정되지 않은 작업자 GC 로그를 정기적으로 정리하는 것입니다.

    수학을 수행하고 충분한 디스크 공간이 있는지 확인하십시오.

    사람들은 GC 로그에서 세부 정보와 컨텍스트를 기본값보다 자주 원하기 때문에 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps을 추가하는 것이 좋습니다.

    모두 함께 worker.childopts에 다음과 같이 추가합니다 : -verbose:gc -Xloggc:/var/log/storm/storm-worker-%TOPOLOGY-ID%-%WORKER-ID%-gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps logrotate를 구성합니다. 당신은 % t 넣을 수 있습니다 자바의 일부 버전에서

    • : 나는 적어도 내 사용 사례에 대한 장점을 볼 수 없습니다하지만

      마지막으로, 로그 파일 이름을 지정하기위한 몇 가지 다른 옵션을 언급해야한다 GC 로그 파일 명명에서 Java는 이것을 <YYYY>-<MM>-<DD>_<HH>-<MM>-<SS>으로 포맷 된 현재 타임 스탬프로 대체합니다. 현재 프로세스 ID를 얻기 위해 % p를 종료 할 수도 있습니다.

    • 누군가는 적어도 Ambari를 사용하는 경우 Storm과 Java의 일부 조합에서`date + '% Y % m % d % H % M'과 같은 역 따옴표를 붙일 수 있다고 말했습니다. 그는 Storm 0.10.0 및 Java 1.7.0_95와 함께 작동한다고보고했으나 폭풍 0.9.3.2.2.0.0-2041 및 Java 1.7.0_75로 동작하지 못했습니다.