Nginx 필기 2018 - 1 - 10
tcp 연결 의 수명 주 기 를 결합 하여 nginx 가 연결 을 어떻게 처리 하 는 지 봅 시다.먼저, nginx 는 시작 할 때 설정 파일 을 분석 하고 감청 이 필요 한 포트 와 ip 주 소 를 얻 은 다음 nginx 의 master 프로 세 스 에서 이 모니터링 의 socket (socket 생 성, addrreuse 설정 등 옵션 을 초기 화하 고 지정 한 ip 주소 포트 에 연결 한 다음 에 listen) 을 한 다음 에 fork 에서 여러 개의 키 프로 세 스 를 내 고 하위 프로 세 스 는 accept 새로운 연결 을 경쟁 합 니 다.이때 클 라 이언 트 는 nginx 에 연결 할 수 있 습 니 다.클 라 이언 트 와 서버 가 세 번 의 악 수 를 통 해 연결 을 만 든 후에 nginx 의 한 키 프로 세 스 는 accept 에 성공 하여 이 연결 을 만 든 socket 을 얻 은 다음 에 nginx 가 연결 에 대한 패 키 지 를 만 듭 니 다. 즉, ngxconnection_t 구조 체.이 어 읽 기와 쓰기 이벤트 처리 함 수 를 설정 하고 읽 기와 쓰기 이 벤트 를 추가 하여 클 라 이언 트 와 데 이 터 를 교환 합 니 다.마지막 으로 nginx 나 클 라 이언 트 가 자발적으로 연결 을 끄 면 연결 하나 가 죽 습 니 다.
2. 어떤 프로 세 스 는 남 은 연결 이 있 지만 처리 할 기회 가 없습니다. 어떤 프로 세 스 는 남 은 연결 이 없 기 때문에 인위적으로 연결 을 버 립 니 다.그렇다면 이 문 제 를 어떻게 해결 할 것 인가?
우선, nginx 의 처 리 는 accept 를 먼저 열 어야 합 니 다.mutex 옵션, 이때 accept 만 획득mutex 프로 세 스 가 accept 이 벤트 를 추가 할 수 있 습 니 다. 즉, nginx 는 프로 세 스 가 accept 이 벤트 를 추가 할 지 여 부 를 제어 합 니 다.nginx 는 ngx 라 는 이름 을 사용 합 니 다.accept_disabled 변 수 는 accept 경쟁 여 부 를 제어 합 니 다.mutex 자물쇠.
ngx_accept_disabled = ngx_cycle->connection_n / 8 - ngx_cycle->free_connection_n;
if (ngx_accept_disabled > 0) {
ngx_accept_disabled--;
} else {
if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
return;
}
if (ngx_accept_mutex_held) {
flags |= NGX_POST_EVENTS;
} else {
if (timer == NGX_TIMER_INFINITE
|| timer > ngx_accept_mutex_delay)
{
timer = ngx_accept_mutex_delay;
}
}
}
첫 번 째 코드 에서 ngx 를 계산 합 니 다.accept_disabled 의 값 입 니 다. 이 값 은 nginx 단일 프로 세 스 의 모든 연결 총수 의 8 분 의 1 입 니 다. 남 은 연결 수량 을 빼 고 얻 은 이 ngxaccept_disabled 는 하나의 규칙 이 있 습 니 다. 나머지 연결 수가 전체 연결 수의 8 분 의 1 보다 적 을 때 그 값 은 0 보다 크 고 나머지 연결 수가 작 을 수록 이 값 이 큽 니 다.
두 번 째 코드 를 다시 보 세 요.accept_disabled 가 0 이상 이면 accept 를 가 져 오 려 고 시도 하지 않 습 니 다.mutex 자물쇠, 그리고 ngxaccept_disabled 는 1 을 줄 이기 때문에 이 곳 에 실 행 될 때마다 0 보다 작 을 때 까지 1 을 줄 입 니 다.받 지 않 기 acceptmutex 자 물 쇠 는 연결 을 얻 을 기 회 를 주 는 것 과 같 습 니 다. 남 은 연결 이 적 을 수록 ngxaccept_disable 이 클 수록 다른 프로 세 스 가 자 물 쇠 를 가 져 올 기회 가 많 습 니 다.accept 를 하지 않 으 면 자신의 연결 이 제어 되 고 다른 프로 세 스 의 연결 탱크 가 이 용 됩 니 다. 그러면 nginx 는 여러 프로 세 스 간 연결 의 균형 을 제어 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.