2014-07-25 2 views
0

나는 이것에 관련해 아무 것도 찾지 못했다. 그래서 나는 다른 사람들도 관심을 가질 것이라고 생각하면서 여기 물었다.클로버의 flushPolicy 및 flushInterval이 설정되었을 때 메모리 사용에 미치는 영향

flushPolicyinterval 또는 threaded이고 어떤 값이 flushInterval으로 설정되면 메모리 소비에 미치는 영향은 무엇입니까? 간격을 더 짧게 사용하면 지금까지 수집 된 범위가 디스크로 오프로드 될 것이므로 메모리에 대한 수요가 줄어들 것입니까? 실제 사용에 대한

리틀 폴링 :

  1. 당신이 실제로 이러한 정책을 사용하십니까?
  2. 어떤 간격을 사용합니까? 그 이유는 무엇입니까?

답변

1

다른 플러시 정책에 대한 메모리 소비에는 차이가 없습니다. 간단히 말하면 (*), Clover는 거대한 long [] 배열 하나를 할당하고이를 메모리에 영구히 보관하는 방식으로 작동합니다. 플러시는 배열 내용을 하드 드라이브의 파일에 덤프합니다. 배열은 할당이 취소되거나 축소되지 않습니다.

는 는

(*)를 사용할 글로벌 범위 (https://confluence.atlassian.com/display/CLOVER/Coverage+Recorders)에 대한 세 가지 범위 레코더 및 다섯 가지 단위 테스트 기록 전략이있다 (https://confluence.atlassian.com/display/CLOVER/Clover+Performance+Tuning)

flushPolicy = 간격 또는 flushPolicy는 = 유용 스레드 있습니까 ? 예, JVM을 종료하지 않을 경우 유용합니다. 클로버의 기본 플러시 정책은 JVM 종료 후크에서만 글로벌 커버리지 데이터를 씁니다. 이는 JVM이 종료 될 때까지 커버리지 데이터를 얻지 못한다는 것을 의미한다. 이것은 Tomcat 서버가 영구적으로 실행 중이고 애플리케이션을 재배포하고 테스트를 다시 실행한다고 가정 해 보겠습니다.

어떤 플러시 간격을 사용할 수 있습니까? 내 경험으로 볼 때, 플러시 작업은 매우 빠릅니다. 빠른 계산 : ~ 1MLOC을 갖는 프로젝트는 ~ 1MMB의 메소드 + 문장 + 브래치 (~ 4MB 기록 파일)를 가질 수 있습니다. 따라서 500MB/s SSD 드라이브에서 초당 ~ 100 번 플러시 할 수 있습니다.

나는 을 보았습니다. flushInterval 값은 500ms에서 5000ms 사이입니다. 낮은 값을 사용하는 것이 좋습니다. 왜? 클로버의보고 목표 (clover2 : clover)는 적어도 한 번의 플러시 작업이 발생했는지 확인하기 위해 보고서 생성을 시작할 때까지 2 * flushInterval 동안 일시 중지됩니다. 따라서 flushInterval 값이 부당하게 높으면 빌드 속도가 느려집니다.

+0

몇 가지 가상 컴퓨터에서 clover.db에 적용 범위를 수집 한 다음 다른 컴퓨터에서 병합하는 매우 구체적인 설정이 있습니다. 당신의 대답을 읽은 후, 간격 플러시 정책을 켜면 항상 기록 된 데이터를 메모리에 유지하면서 성능 이점을 얻지 못할 것입니다 (맞습니까?). 또한 필자의 경우 기록 된 파일은 하드 드라이브에 쓰기 때문에 90MB가 지나치게 증가 할 수 있습니다. – Martin

+0

"... 간격 플러시 정책을 켜면 항상 기록 된 데이터를 항상 메모리에 유지하므로 성능상의 이점을 얻을 수 없습니다."- 맞습니다. – Marek

+0

"... 내 경우 기록 된 파일은 90MB입니다." 와우 이것은 엄청나 다. 프로젝트의 규모는 얼마나됩니까? – Marek