2017-12-23 12 views
1

그래서 jms msg를 청취하고 수정 태그에 따라 다른 기록 대기열에 기록하는 간단한 코드가 있습니다.오랫동안 실행중인 FileChannel.lock

public void onEvent(InputEvent inputEvent) { 
    String msg = ((SimpleInputEvent) inputEvent).getMessage(); 
    int start = msg.indexOf("\u000155="); 
    if (start == -1){ 
     // dropping it 
     return; 
    } 
    char symbol = msg.charAt(start+4); 
    for (int i = m_ranges.length - 1; i >= 0; i --){ 
     if (symbol >= m_ranges[i]){ 
      m_appenders[i].writeText(msg); 
      break; 
     } 
    } 
} 

는 지금, 나는 몇 가지 성능 테스트를 실행 그리고 난 그것이

Profile

메인 스레드가 위의 함수를 실행 프로필

의이 종류를 가지고 참조하십시오. 그리고 FileChannel.lock이 30 초 동안 계속 실행되고 있음을 알 수 있습니다! 그게 무슨 일인지 모르겠습니다. 이런 대기열을 만들었습니다.

 m_queues[j] = SingleChronicleQueueBuilder.binary(path + "_" + m_ranges[j]).build(); 
     m_appenders[j] = m_queues[j].acquireAppender(); 

고마워요!

더 읽은 후, 나는이 테스트에서 결코 도달하지 못하는 512Mb로 blockSize를 늘렸다. 그러나 성능 테스트에서 여전히 병목 현상이 발생합니다. 특히, sar shows

나는이 코드가 결코 실행되지 않아야하는 cq4 파일에 작성한 것보다 bufferSize를 크게 늘 렸습니다. 그러나 시스템에 병목 현상이 여전히 있습니다. 나는 특별 행정구를 켤 경우에, 나는

오전 5시 5분 41초를 참조 TPS rtPS 서비스 wtps 빵/s의 bwrtn/s의 .... 오전 5시 10분 12초 714.14 0.00 714.14 0.00 6901.01

05 : 오전 5시 41분 422.00 0.00 3376.00 8.00 0.10 0.23 0.00 0.20

DEV TPS rd_sec는/s는 wr_sec/S가 avgrq-SZ는 avgqu-SZ 기다리고 svctm 활용도가 ... 오전 5시 10분 12초가 rootvg에-lvar 무엇을해야 나는 책상에 쓰는 큰 덩어리를 피하려고합니까?

+0

OS/커널 버전과 Java 버전을 알려주시겠습니까? –

답변

0

최근 Linux를 실행한다고 가정하면, SAR에서 볼 수있는 것은 커널이 페이지 캐시에서 디스크로 페이지를 쓰는 것입니다.

크로니클 큐는 디스크에 직접 기록하는 대신 메모리 매핑 된 파일을 사용합니다. 따라서 운영 체제는 대기열 파일의 데이터가 실제로 저장소에 지속되는시기를 제어합니다.

이러한 쓰기 크기를 줄이려면 짧은 간격으로 페이지를 플러시하도록 커널을 구성 할 수 있습니다.