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 넣을 수 있습니다 자바의 일부 버전에서