2016-08-05 4 views
0

Clojure에서 http.async.client 1.1.0을 사용하여 websocket 클라이언트를 만듭니다.HashedWheelTimer 인스턴스가 너무 많습니다.

  • 약 1 분 기적으로 이전을 닫습니다
  • 코드를 몇 초부터 시작하여 대기 시간 증가 및 종료와 함께 해제에 대한 연결을 다시 연결 : 내 코드 로직의 추가 몇 줄의, example websocket client 거의 정확 WebSocket이 존재하고 열려있는 경우

내 문제는 며칠에서 며칠 동안 이것을 실행 한 후에 콘솔에이 오류 메시지가 인쇄되는 것입니다. 내 로깅이나 응용 프로그램의 어떤 것도 출력되지 않으며, 처음에는 다시 연결되도록 연결되어 있다고 생각했지만 이전이나 몇 시간 후에 다시 연결이 없을 때도 얻을 수있었습니다.

Jul 24, 2016 6:48:18 AM org.jboss.netty.util.internal.SharedResourceMisuseDetector 
WARNING: You are creating too many HashedWheelTimer instances. HashedWheelTimer is a shared resource that must be reused across the application, so that only a few instances are created. 

이것은 인 Netty의 SharedResourceMisuseDetectorAsynchronous Http Client for Java에 의해 사용에 의해 트리거 될 것으로 보인다. 이것은 HashedWheelTimer 인스턴스가 256 개를 넘을 때 발생합니다. HashedWheelTimer가 하나만 있어야한다는 것을 모든 것이 가리킬 때 HashedWheelTimer의 많은 인스턴스를 생성하는 것이 무엇인지 이해하려고 노력하고 있습니다. 이것은 무언가가 제대로 정리되지 않은 것처럼 보입니다. 누구든지 정확하게 HashedWheelTimers를 만드는 방법과이를 막는 방법을 알고 있습니까?

+0

다시 연결 논리가 나를 찾는 첫 번째 장소가됩니다. 질문에 붙여 넣을 수 있다면 대답하기가 훨씬 쉽습니다. 루프/재귀가 (연결 생성을 포함하기 때문에 잘못된 위치에 있습니다.) 또는 재 연결이 이전 연결에 대한 참조를 보유하고있을 수 있습니다. 일부 코드를 보지 않고도 추측 할 수 있습니다. 코드도 변경하지 않고이 문제가 있습니다 (맨 아래의 무한 스핀 루프를 좀 더 합리적인 것으로 변경하는 것만 제외하면) –

+0

코드 재 연결은 매우 간단하며 다음과 같이 작동합니다. 연결 해제시에 잠시 기다렸다가 연결 함수를 호출하십시오. Connect 함수는 이전 클라이언트가 저장된 원자를 검사하고 존재하는 경우이를 닫은 다음 새 연결을 엽니 다. 유일한 클라이언트 관련 코드는 (client/close @ current-client)이고 다음은 (client/websocket (예를 들어, 클라이언트/생성 - 클라이언트) url : open-on : close-on : close : 에러시 오류 : 텍스트 핸들 메시지) 샘플 코드와 코드는 동일하지만 스핀 기능을 제외하고 처리 할 논리 그걸 통해 데이터가 유선을 통해옵니다 (Netty 사용). – Domchi

답변

0

나는 범인을 찾은 것 같습니다.

것은 내가 각각의 재 연결을 위해 일을하고 어떤 것은 :

(client/websocket (client/create-client) url ...) 

... 또는 다른 말로마다 새로운 클라이언트를 작성. 모든 새로운 클라이언트가 자체 HashedWheelTimer를 인스턴스화하는 것으로 보입니다. 이제는 하나의 클라이언트 만 인스턴스하고 재사용합니다. 문제가 해결 된 것 같습니다.