Linux 커 널 파 라 메 터 를 최적화 하여 서버 병행 처리 능력 을 향상 시킨다.

6954 단어 운영 구조
서버 하드웨어 자원 의 한도 가 유한 한 상황 에서 서버 의 성능 을 가장 크게 착취 하고 서버 의 병행 처리 능력 을 향상 시 키 는 것 은 많은 운영 기술자 들 이 생각 하 는 문제 이다.Linux 시스템 의 부하 능력 을 향상 시 키 려 면 nginx 등 네 이 티 브 병행 처리 능력 이 강 한 웹 서버 를 사용 할 수 있 습 니 다. 아파 치 를 사용 하면 Worker 모드 를 사용 하여 병행 처리 능력 을 향상 시 킬 수 있 습 니 다.그 밖 에 비용 절감 을 고려 한 상황 에서 리 눅 스 의 커 널 관련 TCP 인 자 를 수정 하여 서버 성능 을 최대한 향상 시 킬 수 있다.물론 가장 기본 적 인 부하 향상 문 제 는 서버 하드웨어 를 업그레이드 하 는 것 이 가장 근본 적 인 것 이다.
1. TCP 커 널 파 라 메 터 를 조정 하여 시스템 이 TIME 를 방출 하도록 합 니 다.WAIT 연결
Linux 시스템 에서 TCP 연결 이 끊 기 면 TIMEWAIT 상 태 는 일정 시간 유지 한 후에 야 포트 를 풀 수 있 습 니 다.동시 다발 요청 이 너무 많 을 때 대량의 TIME 가 발생 합 니 다.WAIT 상태의 연결 이 제때에 끊 기지 않 으 면 대량의 포트 자원 과 서버 자원 을 차지 합 니 다.이 럴 때 우 리 는 TCP 의 커 널 파 라 메 터 를 최적화 하여 TIMEWAIT 상태의 포트 를 제거 합 니 다.대량의 TIME 보유WAIT 상태의 연결 로 인해 시스템 자원 이 효과적으로 소모 되 는데, 그렇지 않 으 면 효과 가 뚜렷 하지 않 을 수 있다.netstat 명령 으로 TIME 를 찾 을 수 있 습 니 다.WAIT 상태의 연결 상태 입 니 다. 아래 의 조합 명령 을 입력 하고 현재 TCP 연결 상태 와 해당 하 는 연결 수량 을 확인 하 십시오.
$ netstat-n|awk‘/^tcp/{++S[$NF]}END{for(ain S)printa,S[a]}’

  :
LAST_ACK16
SYN_RECV348
ESTABLISHED70
FIN_WAIT1229
FIN_WAIT230
CLOSING33
TIME_WAIT18098

일반적으로 TIME 에 만 관심 을 가 져 야 합 니 다.WAIT 의 개수, 여기 서 볼 수 있 습 니 다. 18000 여 개의 TIMEWAIT, 이렇게 해서 18000 여 개의 포트 를 점용 했다.포트 의 수량 이 65535 개 에 불과 하고 하 나 를 적 게 차지 하면 후계 의 새로운 연결 에 심각 한 영향 을 줄 수 있다 는 것 을 알 아야 한다.이러한 상황 에서 우 리 는 리 눅 스 의 TCP 커 널 파 라 메 터 를 조정 하여 시스템 이 TIME 를 더욱 빨리 방출 하도록 할 필요 가 있다.WAIT 연결.
커 널 매개 변수 조정:
$ cat >> /etc/sysctl.conf << END
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
END


$ sysctl-p  #    

커 널 매개 변수
속뜻
net.ipv4.tcp_syncookies=1
SYNCookies 를 엽 니 다.SYN 대기 열 이 넘 칠 때 cookies 를 사용 하여 처리 합 니 다. 소량의 SYN 공격 을 예방 할 수 있 습 니 다. 기본 값 은 0 으로 닫 음 을 표시 합 니 다.
net.ipv4.tcp_tw_reuse=1
재 활용TIME - WITsockets 를 새로운 TCP 연결 에 다시 사용 할 수 있 도록 합 니 다. 기본 값 은 0 입 니 다. 닫 기 를 표시 합 니 다.
net.ipv4.tcp_tw_recycle=1
TCP 연결 을 여 는 TIME - WITsockets 의 빠 른 회 수 를 표시 합 니 다. 기본 값 은 0 입 니 다. 닫 기 를 표시 합 니 다.
net.ipv4.tcp_fin_timeout
시스템 의 기본 TIMEOUT 시간 을 수정 합 니 다.
이러한 조정 을 거 쳐 서버 의 부하 능력 을 더욱 향상 시 키 는 것 외 에 도 소 유량 정도 의 DDoS, CC, SYN 공격 도 방어 할 수 있다.
2. TCP 의 사용 가능 한 포트 범위 최적화
연결 수 자체 가 많 으 면 TCP 의 사용 가능 한 포트 범 위 를 최적화 하여 서버 의 병행 능력 을 한층 더 향상 시 킬 수 있 습 니 다. $cat >> /etc/sysctl.conf << END net.ipv4.tcp_keepalive_time=1200 net.ipv4.ip_local_port_range=1000065000 net.ipv4.tcp_max_syn_backlog=8192 net.ipv4.tcp_max_tw_buckets=5000 END
이 몇 개의 매개 변 수 는 데이터 가 매우 많은 서버 에서 만 열 면 현저 한 효과 가 있 을 것 을 권장 합 니 다.일반적인 데이터 가 적은 서버 에 서 는 이 몇 개의 인 자 를 설정 할 필요 가 없다.
커 널 매개 변수
속뜻
net.ipv4.tcp_keepalive_time=1200
keepalive 가 기 용 될 때 TCP 가 keepalive 메 시 지 를 보 내 는 빈 도 를 나타 낸다.결 성 은 2 시간 에서 20 분 으로 바 뀌 었 다.
net.ipv4.ip_local_port_range=1000065000
외부 연결 에 사용 할 포트 범 위 를 표시 합 니 다.성 이 부족 한 상황 은 매우 작다. 32768 에서 61000 으로 10000 에서 65000 으로 바 뀌 었 다.(주의: 여 기 는 최저 치 를 너무 낮 게 설정 하지 마 세 요. 그렇지 않 으 면 정상 적 인 포트 를 차지 할 수 있 습 니 다!)
net.ipv4.tcp_max_syn_backlog=8192
SYN 대기 열의 길 이 를 표시 합 니 다. 기본 값 은 1024 이 고 대기 열의 길 이 는 8192 입 니 다. 연결 을 기다 리 는 네트워크 연결 수 를 더 수용 할 수 있 습 니 다.128 M 메모리 가 있 는 시스템 의 경우 부족 한 값 은 1024 이 고 작은 메모리 의 시스템 은 128 이다.
net.ipv4.tcp_max_tw_buckets=6000
시스템 유지 TIMEWAIT 의 최대 수량, 이 숫자 를 초과 하면 TIMEWAIT 는 즉시 제거 되 고 경고 메 시 지 를 인쇄 합 니 다.기본 값 은 180000 이 고 6000 으로 바 뀌 었 습 니 다.Apache, Nginx 등 서버 에 대해 서 는 위의 몇 줄 의 인자 가 TIME 를 잘 줄 일 수 있 습 니 다.WAIT 소켓 수 는 있 지만 Squid 에 대해 서 는 효과 가 크 지 않다.이 매개 변 수 는 TIME 를 제어 할 수 있 습 니 다.WAIT 의 최대 수량, Squid 서버 가 대량의 TIMEWAIT 끌 어 죽 여.
3. 커 널 기타 TCP 파라미터 설명
커 널 매개 변수
속뜻
net.core.netdev_max_backlog=32768
모든 네트워크 인터페이스 에서 패 킷 을 받 는 속 도 는 커 널 이 이 패 킷 을 처리 하 는 속도 보다 빠 를 때 대기 열 에 보 내 는 패 킷 의 최대 수 를 허용 합 니 다.
net.core.somaxconn=32768
웹 응용 프로그램 에서 listen 함수 의 backlog 는 기본적으로 커 널 매개 변수 인 net. core. somaxconn 을 128 로 제한 하고 nginx 가 정의 하 는 NGX 를 제공 합 니 다.LISTEN_BACKLOG 는 기본적으로 511 이기 때문에 이 값 을 조정 할 필요 가 있 습 니 다.
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.core.rmem_max=16777216
최대 socket 읽 기 buffer, 참고 가능 한 최적화 값: 873200
net.core.wmem_max=16777216
최대 socket 쓰기 buffer, 참고 가능 한 최적화 값: 873200
net.ipv4.tcp_timestsmps=0
시간 스탬프 는 시리 얼 번호 의 와 인 딩 을 피 할 수 있다.1Gbps 의 링크 는 반드시 이전에 사 용 했 던 시리 얼 번 호 를 만 날 것 이다.타임 스탬프 는 커 널 이 이러한 이상 한 패 키 지 를 받 아들 일 수 있다.여 기 는 꺼 야 합 니 다.
net.ipv4.tcp_synack_retries=2
커 널 은 엔 드 연결 을 열기 위해 SYN 을 보 내 고 앞의 SYN 에 응답 하 는 ACK 를 첨부 해 야 합 니 다.세 번 의 악수 중 두 번 째 악수 라 는 것 이다.이 설정 은 커 널 이 연결 을 포기 하기 전에 SYN + ACK 패 키 지 를 보 내 는 수량 을 결정 합 니 다.
net.ipv4.tcp_syn_retries=2
커 널 이 연결 을 포기 하기 전에 SYN 패 키 지 를 보 내 는 수량 입 니 다.
net.ipv4.tcp_tw_len=1
net.ipv4.tcp_tw_reuse=1
오픈 재사 용.TIME - WITsockets 를 새로운 TCP 연결 에 다시 사용 할 수 있 도록 합 니 다.
net.ipv4.tcp_wmem=8192436600873200
TCP 쓰기 buffer, 참고 가능 한 최적화 값: 8192436600873200
net.ipv4.tcp_rmem =32768436600873200
TCP 읽 기 buffer, 참고 가능 한 최적화 값: 32768436600873200
net.ipv4.tcp_mem=945000009150000092700000
넷. ipv4. tcpmem [0]: 이 값 보다 낮 으 면 TCP 에 메모리 압력 이 없습니다.net.ipv4.tcp_mem [1]: 이 값 에서 메모리 압력 단계 에 들 어 갑 니 다.net.ipv4.tcp_mem [2]: 이 값 보다 높 으 면 TCP 는 socket 분 배 를 거부 합 니 다.이 메모리 단 위 는 바이트 가 아니 라 페이지 입 니 다.참고 할 수 있 는 최적화 치 는 78643210485761572864 이다.
net.ipv4.tcp_max_orphans=3276800
시스템 에서 최대 몇 개의 TCP 소켓 이 사용자 파일 핸들 에 연결 되 지 않 습 니 다.이 숫자 를 초과 하면 연결 이 즉시 복원 되 고 경고 메 시 지 를 출력 합 니 다.이 제한 은 단지 간단 한 DoS 공격 을 방지 하기 위해 서 일 뿐, 그것 에 지나치게 의존 하거나 인위적으로 이 값 을 줄 일 수 없 으 며, 이 값 을 증가 시 켜 야 한다 (메모리 가 증가 하면).
net.ipv4.tcp_fin_timeout=30
소켓 이 이 단 에서 닫 으 라 고 요구 하면 이 매개 변 수 는 FIN - WAIT - 2 상 태 를 유지 하 는 시간 을 결정 합 니 다.엔 드 에 오류 가 발생 할 수 있 으 며 연결 을 영원히 닫 지 않 을 수 있 으 며, 심지 어 는 의외로 컴퓨터 에 있 을 수도 있다.결 성 치 는 60 초 입 니 다.2.2 커 널 의 보통 값 은 180 초 입 니 다. 이 설정 을 누 를 수 있 습 니 다. 그러나 기억 해 야 할 것 은 기계 가 가 벼 운 WEB 서버 라 하 더 라 도 대량의 소켓 으로 인해 메모리 가 넘 칠 위험 이 있 습 니 다. FIN - WAIT - 2 의 위험성 은 FIN - WAIT - 1 보다 작 습 니 다. 최대 1.5K 메모리 만 먹 을 수 있 지만 생존 기간 이 길 기 때 문 입 니 다.

좋은 웹페이지 즐겨찾기