2014-06-17 3 views
7

Hazelcast 2.5에서 알려진 (고정 된) 버그로 인해 우리 프로젝트의 다음 업그레이드 후보로 결정되었습니다. 그러나 최신 버전 (3.2.2)을 출시 한 후 우리는 끔찍한 성능을 보였습니다.Hazelcast 2.5에서 3+로 성능 저하 업그레이드

우리가 Hazelcast를 사용하는 방법 :

  • 여러 IMAP 인스턴스 (총 약 7지도)
  • 두 노드의 많은지도에 읽는지도
  • 를 업데이트

    • 두 노드
    • 근접 캐시를 사용하여 읽기 속도를 높입니다.

    Hazelcast 2.5를 사용하여 map.values()을 사용하는 대신 포함 된 모든 키 목록 map.getAll(containedKeys)을 제공했을 때 뛰어난 성능을 보였습니다. contains 키를 동시성 세트에 저장하는 맵에 EntryListener을 추가하여 containedKeys를 추적하는 방식입니다. 이것은 동료에 의해 추가되고 해킹처럼 느껴지지만 매력처럼 작동합니다.

    com.hazelcast.map.proxy.MapProxyImpl:getAll:326 (method time = 0 ms, total time = 18938 ms) 
    com.hazelcast.map.proxy.MapProxySupport:getAllObjectInternal:495 (method time = 0 ms, total time = 18938 ms) 
        com.hazelcast.map.MapService:toObject:852 (method time = 0 ms, total time = 18938 ms) 
        com.hazelcast.spi.impl.NodeEngineImpl:toObject:156 (method time = 0 ms, total time = 18938 ms) 
        com.hazelcast.nio.serialization.SerializationServiceImpl:toObject:221 (method time = 0 ms, total time = 18938 ms) 
        com.hazelcast.nio.serialization.StreamSerializerAdapter:read:59 (method time = 0 ms, total time = 18938 ms) 
         com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer:read:185 (method time = 0 ms, total time = 18938 ms) 
         java.io.ObjectInputStream:readObject:370 (method time = 3398 ms, total time = 18938 ms) 
         java.io.ObjectInputStream:readObject:370 (method time = 15540 ms, total time = 15540 ms) 
    

    이것은 우리가 Hazelcast 2.5에서 볼 수없는 무언가,하지만 :

    이제 우리는 Hazelcast 3.2.2로 업그레이드 할 때 우리는 즉시 예를 들어 AppDynamics에서 다음 코드를 보면, java.io 문제를 참조 3.2.2에있다. 우리의 응용 프로그램을 완전히 멈추게합니다. 항아리를 다시 2.5로 바꾸고 (Entry를 MapEntry로 다시 이름을 바꾼다.) 아무 것도 잘못된 것이다.

    이 문제의 원인은 무엇일까요? 어쩌면 니어 캐시를 더 이상 사용하지 않는 것일까 요?

  • +0

    자신의 스냅 샷을 신속하게 빌드하고 시도 할 수 있습니까? nearcache 버그가 있었지만이 상황에 적용되는지 확실하지 않습니다. – noctarius

    +0

    저는 이미 이것을 패치했습니다 : https://github.com/hazelcast/hazelcast/pull/2523 loadClass가 수정되었지만이 readObject는 이제 병목 현상입니다. 패치/방향을 알려주십시오. –

    +1

    Java 표준 직렬화는 항상 병목 현상이 될 것입니다. 고속을 원하면 그냥 사용하지 않거나 적어도 j.i.Externalizable을 사용하십시오. – noctarius

    답변