linux 커널 매개 변수 조정

7420 단어 시스템 최적화
kernel.shmmax、kernel.shmall、net.ipv4.tcp_mem 실제 서버 메모리 크기에 따라 조정
echo "net.ipv4.ip_forward = 1   
net.ipv4.conf.all.rp_filter = 1  
net.ipv4.conf.default.rp_filter = 1 
net.ipv4.conf.all.accept_source_route = 0  
net.ipv4.conf.default.accept_source_route = 0   
kernel.sysrq = 0   
kernel.core_uses_pid = 1  
kernel.msgmnb = 65536 
kernel.msgmax = 65536 
kernel.shmmax = 8589934591 
kernel.shmall = 2097152    
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
fs.file-max = 6553560   
### 
vm.vfs_cache_pressure = 100000
vm.swappiness = 10
net.core.wmem_default = 8388608   
net.core.rmem_default = 8388608  
net.core.rmem_max = 16777216 
net.core.wmem_max = 16777216 
net.ipv4.tcp_rmem = 4096 8192 4194304 
net.ipv4.tcp_wmem = 4096 8192 4194304    
net.ipv4.tcp_mem = 196608 262144 393216  
## DDOS ,TCP 
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_synack_retries = 1  
net.ipv4.tcp_syn_retries = 1   
net.ipv4.tcp_max_syn_backlog = 262144 
## timewait ,TCP 
net.ipv4.tcp_max_tw_buckets = 6000  
net.ipv4.tcp_tw_recycle = 1  
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_timestamps = 0   
net.ipv4.tcp_fin_timeout = 30 
net.ipv4.ip_local_port_range = 1024 65000
###TCP keepalived  
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 15 
net.ipv4.tcp_keepalive_probes = 5

### TCP 
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 262144  
net.ipv4.tcp_max_orphans = 3276800    
net.ipv4.tcp_sack = 1  
net.ipv4.tcp_window_scaling = 1"  >> /etc/sysctl.conf

# 
sysctl -p

각 매개변수 설명(빨간색 부분은 실제 서버 메모리 크기에 따라 조정됨)
net.ipv4.ip_forward = 1  
IP 전달 기능 켜기
net.ipv4.conf.all.rp_filter = 1   net.ipv4.conf.default.rp_filter = 1   
"알림"kernel 인라인 필터링 (ingress filtering) 및 아웃라인 필터링 강화
net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 
원본 루트 정보를 포함하는 IP 패키지를 받아들일지 여부입니다.매개변수 값은 부울 값이고 1은 수락, 0은 수락되지 않습니다.게이트웨이를 충당하는 linux 호스트에서는 1이고, 일반적인 linux 호스트에서는 0입니다.안전성 차원에서 이 기능을 닫는 것을 권장합니다.
kernel.sysrq = 0  
sysrq 조합 키를 사용하는 것은 시스템의 현재 운행 상황을 이해하고 안전을 위해 0 닫기 설정합니다
kernel.core_uses_pid = 1 
코어 파일의 파일 이름을 확장자로 추가할지 여부를 제어합니다. 다중 루틴 응용 프로그램을 디버깅하는 데 사용됩니다.
kernel.msgmnb = 65536
메시지 대기열에 있는 모든 메시지 총계의 최대값 (msgmnb=64k)
kernel.msgmax = 65536
커널의 메시지 대기열에 있는 메시지의 최대 값을 지정합니다 (msgmax=64k)
kernel.shmmax = 8589934591
핵심 매개 변수 중 가장 중요한 매개 변수 중 하나입니다. 단일 공유 메모리 세그먼트의 최대 값을 정의하는 데 사용됩니다. 64비트 linux 시스템: 취할 수 있는 최대 값은 물리적 메모리 값-1byte이고 권장 값은 물리적 메모리의 절반 이상이며 일반적인 값은 SGA_보다 큽니다.MAX_SIZE를 사용하면 물리적 메모리-1byte를 사용할 수 있습니다.예를 들어, 물리적 메모리가 8GB인 경우 8*1024*1024*1024-1=8589934591
kernel.shmall = 2097152
이 매개 변수는 사용할 수 있는 공유 메모리의 총 페이지 수를 제어합니다.Linux 공유 메모리 페이지 크기는 4KB이고 공유 메모리 세그먼트의 크기는 공유 메모리 페이지 크기의 정수 배입니다.공유 메모리 세그먼트의 최대 크기는 8G입니다. 공유 메모리 페이지 수는 8GB/4KB=8388608KB/4KB=2097152(페이지), 즉 64Bit 시스템에서 8GB의 물리적 메모리를 설정하고kernel을 설정합니다.shmall = 2097152 요구 사항 충족
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
IPv6 끄기
fs.file-max = 6553560 
시스템 수준의 열 수 있는 파일 핸들 수
vm.vfs_cache_pressure = 100000
이 파일은directory와inodecache 메모리에 대한 내부 핵 회수 경향을 나타냅니다.부족값 100은 내부 핵이 페이지cache와 swapcache에 따라directory와inodecache를 합리적인 백분율로 유지한다는 것을 나타낸다.이 값이 100보다 낮으면directory와inodecache를 보존하는 경향이 있습니다.이 값이 100을 초과하면 코어가directory와inodecache를 회수하는 경향이 있습니다
vm.swappiness = 10
swappiness의 값의 크기는 swap 구역을 어떻게 사용하는지에 대해 매우 큰 관계를 가진다.swappiness=0은 물리적 메모리를 최대한 사용하고 그 다음은 swap 공간이며, swappiness=100은 swap 구역을 적극적으로 사용하고 메모리의 데이터를 제때에 swap 공간으로 운반한다.linux의 기본 기본값은 60입니다.
net.core.wmem_default = 8388608 
TCP socket의 전송 버퍼에 사용할 메모리 기본값(바이트) 예약
net.core.rmem_default = 8388608
TCP socket의 수신 버퍼에 사용할 메모리 기본값(바이트) 예약
net.core.rmem_max = 16777216 
TCP socket에 대한 수신 버퍼에 사용할 메모리 최대 값 (바이트) 예약
net.core.wmem_max = 16777216 
TCP socket에 대한 전송 버퍼에 사용할 메모리 최대 값 (바이트) 예약
net.ipv4.tcp_rmem = 4096 8192 4194304  net.ipv4.tcp_wmem = 4096 8192 4194304 
각 TCP 연결에 할당된 읽기, 쓰기 버퍼 메모리 크기는 바이트입니다.첫 번째 숫자는 TCP 연결에 할당된 최소 메모리를 나타냅니다. 두 번째 숫자는 TCP 연결에 할당된 기본 메모리를 나타냅니다. 세 번째 숫자는 TCP 연결에 할당된 최대 메모리는 일반적으로 기본값에 따라 분배됩니다. 이 예는 읽기와 쓰기가 모두 8KB이고 총 16KB 1.6GB TCP 메모리가 수용할 수 있는 연결 수는 약 1600MB/16KB = 100K = 10만 4.0GB TCP 메모리가 수용할 수 있는 연결 수는 약 4000MB/16KB = 250K = 25만 개입니다.
net.ipv4.tcp_mem = 196608 262144 393216
첫 번째 숫자는 tcp가 사용한 페이지가 196608보다 적을 때kernel이 관여하지 않는다는 것을 나타낸다. 두 번째 숫자는 tcp가 262144를 초과한 페이지를 사용할 때kernel은'memory pressure'스트레스 모드에 들어간다. 세 번째 숫자는 tcp가 사용한 페이지가 393216을 초과할 때(1.6GB 메모리에 해당)를 나타낸다. Out of socket memory 이상의 수치는 4GB 메모리 기기에 적용된다.8GB 메모리 시스템의 경우 다음과 같은 매개 변수를 사용하는 것이 좋습니다. 넷.ipv4.tcp_mem = 524288 699050 1048576(TCP 연결에 최대 4GB 메모리 사용)
net.ipv4.tcp_syncookies = 1 
커널 컴파일 시에만 CONFIG_ 선택SYNCOOKIES 때 작용합니다.syn 대기 대기열이 넘칠 때syncookies를 보내는 것과 같습니다.synflood 공격을 방지하기 위해서입니다.
net.ipv4.tcp_synack_retries = 1 
쌍방향 연결을 열기 위해서는 커널에 SYN을 보내고 앞에 있는 SYN에 응답하는 ACK를 첨부해야 합니다.이른바 세 번의 악수 중 두 번째 악수다.이 설정은 커널이 연결을 포기하기 전에 SYN+ACK 패키지를 보내는 수를 결정합니다.시스템 SYN 연결 재시도 횟수를 줄이고 쌍방향 연결을 열기 위해 커널은 SYN을 보내고 이전 SYN에 응답하는 ACK를 첨부해야 합니다.
net.ipv4.tcp_syn_retries = 1 
커널이 연결을 포기하기 전에 SYN 패키지를 보내는 수
net.ipv4.tcp_max_syn_backlog = 262144 
클라이언트의 확인 정보를 받지 못한 연결(SYN 메시지) 대기열의 길이를 나타냅니다. 기본값은 1024이고 대기열의 길이는 262144입니다. 연결을 기다리는 네트워크 연결 수를 더 많이 수용할 수 있습니다. 시스템은 더 많은 병렬 연결을 처리할 수 있습니다.
net.ipv4.tcp_max_tw_buckets = 6000 
timewait의 수량, 기본값은 180000입니다.TIME_을 동시에 유지하는 시스템 표현WAIT의 최대 수량, 이 수를 초과하면 TIME_WAIT가 즉시 제거되고 경고 메시지가 인쇄됩니다.
net.ipv4.tcp_tw_recycle = 1 
TCP 연결 중 TIME-WAIT sockets를 켜는 빠른 회수 기능을 나타냅니다. 기본값은 0이고 종료됨을 나타냅니다.
net.ipv4.tcp_tw_reuse = 1 
TCP 연결 재사용 기능을 켜서 time_wait sockets는 새 TCP 연결에 다시 사용됩니다. (주로 time_wait 연결에 사용됩니다.) 기본적으로 0은 닫힙니다.
net.ipv4.tcp_timestamps = 0 
시간 스탬프는 시퀀스 번호의 감는 것을 피할 수 있다.1Gbps의 링크는 이전에 사용한 일련 번호를 만날 수 있습니다.타임 스탬프는 커널로 하여금 이런'이상'의 데이터 패키지를 받아들일 수 있게 할 수 있다.이곳은 그것을 꺼야 한다.
net.ipv4.tcp_fin_timeout = 30
FIN-WAIT-2 연결 상태에 있는 시간을 줄여 시스템이 더 많은 연결을 처리할 수 있도록 합니다.기본값은 60초입니다.
net.ipv4.ip_local_port_range = 1024 65000
외부 연결을 허용하는 포트 범위를 나타냅니다.
net.ipv4.tcp_keepalive_time = 1200
이 매개 변수는keepalive가 활성화되었을 때 TCP가keepalive 메시지를 보내는 빈도 (초) 를 나타냅니다.기본값은 2시간입니다. 작게 설정하면 잘못된 연결을 더 빨리 정리할 수 있습니다
net.ipv4.tcp_keepalive_intvl = 15 
탐지가 확인되지 않았을 때, 탐지의 주파수를 다시 보냅니다.기본값은 75초입니다.
net.ipv4.tcp_keepalive_probes = 5
연결의 실효를 인정하기 전에 TCP의keepalive 탐지 패키지를 몇 개 보냅니다.기본값은 9입니다.이 값 곱하기 tcp_keepalive_intvl 이후에 연결을 결정했습니다. keepalive를 보내면 얼마나 많은 시간이 응답하지 않을 수 있는지.
net.core.somaxconn = 8192
listen (함수) 의 기본 매개 변수입니다. 요청의 최대 수량 제한을 끊습니다.웹 응용 프로그램에서listen 함수의backlog는 기본적으로 핵 파라미터의net을 제공합니다.core.somaxconn은 128로 제한되고,nginx가 정의한 NGX_LISTEN_BACKLOG는 기본적으로 511이므로 이 값을 조정할 필요가 있습니다.
net.core.netdev_max_backlog = 262144
네트워크 카드가 데이터 패키지를 수신하는 속도가 코어 처리 속도보다 크면 이 패키지를 저장하는 대기열이 있습니다.이 매개 변수는 이 대기열의 최대 값을 나타낸다
net.ipv4.tcp_max_orphans = 3276800 
시스템에서 최대 몇 개의 TCP 연결이 사용자 파일 핸들에 연결되지 않는지 나타냅니다.여기에 설정된 숫자를 초과하면 연결이 재설정되고 경고 메시지가 출력됩니다.이 제한은 단순한 DoS 공격을 방지하기 위한 것일 뿐이다.이 값은 너무 작으면 안 됩니다.
net.ipv4.tcp_sack = 1  
선택적 응답 (Selective Acknowledgment) 을 사용합니다. 이것은 선택적으로 수신된 메시지에 응답함으로써 성능을 향상시킬 수 있습니다. (이렇게 하면 발송자가 잃어버린 메시지만 보낼 수 있습니다.)(광역 통신) 이 옵션은 활성화되어야 하지만 CPU에 대한 사용량이 증가합니다
net.ipv4.tcp_window_scaling = 1
더 큰 TCP 창을 지원합니다.TCP 창이 최대 65535(64K)를 초과하는 경우 값을 1로 설정해야 합니다.

좋은 웹페이지 즐겨찾기