dns 분석 시간 초과 고장 분석
3812 단어 경험 공유
한 마디 로 총괄 하 다
XX 전송 인터페이스 논리 에서 YY 의 http 인 터 페 이 스 를 호출 했 습 니 다. http client 에서 dns 분석 에 시간 초과 제어 가 없어 http 호출 에 시간 이 초과 되 었 습 니 다.
현상.
XX 가 접속 한 후에 온라인 모니터링 에서 메 시 지 를 보 내 는 인터페이스 응답 시간 에 우발 적 인 피크 가 있 는 것 을 발견 했다. 로 그 를 보면 시간 초과 응답 시간 은 3 - 5s 이 고 같은 시간 에 나타 나 며 최고 9s 의 시간 초과 가 있 으 며 한 기 계 는 매일 약 10 번 정도 느 린 요청 (단기 send 인터페이스 qps 약 1) 이 있다.
조사 하 다
1. 비 즈 니스 코드 의 단계별 소모 로 그 를 통 해 시간 초과 원인 은 스 팸 인 터 페 이 스 를 호출 하 는 http 요청 이 느 리 기 때 문 입 니 다.
2. http client 설정 을 보면 cotimeout 은 100 ms 이 고 sotimeout 은 100 ms 이 며 5s 보다 훨씬 낮 습 니 다.
3. http client 소스 코드 를 보십시오. http client 의 시간 초과 설정 에 문제 가 없습니다.
4. 한 기계 에서 http client 의 debug 로 그 를 열 고 시간 초과 로 그 를 관찰 합 니 다. 문제 가 생 긴 요청 은 모두 인쇄 되 었 습 니 다.
5.
[DEBUG] HttpConnection Open connection to safe.i.t.sina.com.cn:80
로그 위 치 는 HttpConnection. java: 692
6. 코드 를 더 살 펴 보 니 socket 이 연결 되 기 전에 dns 를 분석 하 는 함수 가 시간 초과 시간 에 들 어 오지 않 았 습 니 다.
7.
ReflectionSocketFactory:124
8.
Object remoteaddr = INETSOCKETADDRESS_CONSTRUCTOR.newInstance(
9.
new Object[] { InetAddress.getByName(host), new Integer(port)});
10. 코드 를 더 추적 하면 마지막 으로 Inet6 Address Impl. lookup AllHostAddr (Stringhostname) 에 도착 합 니 다. 대응 하 는 실현 은 native 입 니 다.
11.
jdk/src/solaris/native/java/net/Inet6AddressImpl.c:139
12.
JNIEXPORT jobjectArray JNICALLJava_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
13.
jstring host) {
14.
....
15.
error = (*getaddrinfo_ptr)(hostname, NULL, &hints, &res);
16.
....
17.
}
18.
19.
net_util_md.c:392
20.
getaddrinfo_ptr = (getaddrinfo_f)
21.
JVM_FindLibraryEntry(RTLD_DEFAULT, "getaddrinfo");
22. getaddrinfo 의 시간 초과 시간 은 운영 체제 에 의 해 결정 되 며, 기본 5s, 다시 시도 2 회 입 니 다.
23.
$man resolv.conf
24.
...
25.
timeout:n
26.
sets the amount of time the resolver will wait for a response from a remote name server before retrying the query via a different name server. Measured in seconds, the default is RES_TIMEOUT (currently 5, see
). The maximum value for this option is silently capped to 30.
27.
28.
attempts:n
29.
sets the number of times the resolver will send a query to its name servers before giving up and returning an error to the calling application. The default is RES_DFLRETRY (currently 2, see
). The maximum value for this option is silently capped to 5.
30. XX 기기 의 온라인 설정 을 보면 dns 는 원 격 서버 로 설정 되 어 있 으 며 시간 초과 가 수정 되 지 않 았 으 며, 설 치 된 dns 서버 가 각각 다 릅 니 다. 비교 해 보면 172 네트워크 dns 를 사용 하 는 기기 의 시간 초과 요청 이 약간 많은 것 으로 나 타 났 습 니 다.
31. 호스트 가 지정 한 dns 를 수정 한 후 시간 초과 요청 이 나타 나 지 않 았 습 니 다.
해결 하 다.
1. dnsmasq 로 컬 캐 시 dns 를 사용 합 니 다.
2. 수정 / etc / resolv. conf, dns 분석 최대 시간 초과 조정.
3. 업무 자 는 Feature 방식 으로 http 인 터 페 이 스 를 호출 합 니 다.
4. http client 4. x 는 native dns 가 아 닌 실현 방식 이 있 는 것 같 습 니 다. 시간 초과 (현재 client 버 전 은 3. x) 를 제어 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
2. 부호가 없는 평균수를 모아서 구한다부호수가 없는 평균수를 구하다 문서 목록 제목 중술 문제 분석 및 구해 사고방식 프로그램 코드 내부 RAM30H~37H 단원 중 8개의 기호수가 없는 산술 평균치를 시험적으로 구한 결과 38H에 저장되었다. 보류 중...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.