부적절한 두보 서비스 스레드 풀에 의한 jedis 매개 변수는 비정상적인 고갈
현상하십시오 두보 서비스 개별 컴퓨터의 산발적 인 발생 또는 전체 클러스터는 스레드 풀의 많은 문제가 소진 보도했다. 문제가 상대적으로 거친 취급의 시작은, 직접 스레드 10 배의 수를 증가시킨다. 그러나 문제는 여전히 때때로 일시적인 해결책이 될 수있는 서비스를 다시 시작 나타납니다. 나중에, 조금 높은 주파수 문제를 발견, 우리는주의 깊게 분석 할 수있는 시간을했다.
실제 이유 : jedis가 잘못 설정 매개 변수입니다. 실제 문제의주의 깊은 분석이 후 각 발생에 대한 연결을 얻기 위해 jedis 많은에게 비정상적인 연결 풀을 특별한 시작이 있었다 :
redis.clients.jedis.exceptions.JedisConnection: Could not get a resource from the pool
...省略其他堆栈信息
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect time out
...省略其他堆栈信息
이 때문에 지터에 실제로 타임 아웃 레디 스 노드 장애 또는 네트워크입니다. 그런 다음 jedis 구성을 살펴, 타임 아웃이 1000로 설정되어 maxRedirect 그래서 한 번, 2 레디 스 연결 문제를, 3S에 대한 차단 요청이 발생합니다. 이 서비스에 할당 된 QPS는 장애물 눈사태 주도 축적 두보 요청에 이르게 약 200 독립형입니다. 처리 방법 짧은 타임 아웃, 리디렉션 제거는 상기 서비스 요청에 따라 퓨즈 조립체를 늘려.
레디 스를 얻을 또한 jstack을 분석, 우리가 한 번 두보 스레드 풀을 고갈 문제를 발견, 두보 처리 스레드의 많은 수의 연결 Caton에, 대기에 (주차) 상태입니다. 관련 코드 분석 jedis가 ReentrantReadWriteLock 연결 풀 관리 사용, 연결 관리를 jedis, 새로운 연결을 만들려고합니다,이 과정이 다른 요구로 이어질, 쓰기 잠금을 취할 것입니다 연결을 경쟁 액세스는 잠금 리소스를 포함하고, 레디 스 서버 노드는 연결 풀의 우위를 연결할 수 없습니다 읽기 잠금을 통해 연결 대기 쓰레드로 얻을. 그래서
또한 QPS 설정해야 maxTotal을 (문제의이 세트는 연결의 수는 실제로 10 jedis!).
jedis를 사용하여 스파크 액세스 서비스는 레디 스 원인 서비스 글리치 레디 스
우리는 레디 스 클러스터 클러스터 노드의 수십, 클러스터 압력 읽기와 쓰기는 매우 큰, 비교적 큰 클러스터입니다 사용합니다. 그 중 일부는 jedis 액세스를 사용, 읽기 작업이 다른 서비스 유지 보수 동료를 촉발 물품.
현상 : 레디 스 응답 시간을 찾기가 나타납니다 글리치 정기적으로 .
DBA 조사는 상대적으로 높은 다른 노드 레디 스 클러스터 노드 상대의 부하를 발견하고, 클러스터 슬롯 많은 수의 명령.
분석 : jedis 소스, 연결이 생성되고 클러스터 슬롯이 첫 번째 노드에서 전체 클러스터 레디 스 클러스터 토폴로지를 얻기 위해 명령을 실행하려고하기 시작했다 각 초기화를 jedis, jedis 획득 실패, renewSlotCache을 수행 할 경우 연결 풀을 연결하는, renewClotCache 또한 클러스터 슬롯 명령을 수행한다.
추론 및 분석 한 후, 문제는 사용 jedis의 모드 일괄 처리가 밖으로 완전히 파괴, 그래서 작업 실행의 과정이 반복 불꽃 초기화를 수행합니다, 새 연결 jedis을 생성, 스파크 각 배치 작업을 불꽃에있다가 연결 풀을 jedis 또한 클러스터 슬롯 실행 명령, 커맨드는 DBA 클러스터 슬롯으로부터 습득 될 수있을 첫 번째 노드의 상대적으로 높은 부하의 결과로 자원 소모 (jedis 고정 연결 문자열의 첫 번째 노드는 항상 명령 클러스터 슬롯을 실행합니다) .
프로세스 : 항상 고정 된 첫 번째 노드 클러스터 슬롯을 피하기 위해 순차적으로 깨진 jedis에 의해 연결된 노드의 순서를 수행하는 데 사용됩니다. 이 방법의 구현 후, 버 정말 사라졌다.
질문 : 위의 방법은 말했다 노드 레디 스 부하 불균형 문제를 완화하지만 때문에 모르는 불꽃의 사용, 나는 여러 배치 작업 사이 jedis 연결을 공유 할 수있는 방법이 있는지 모르는 할 수 있습니다.