linux_kernel_parameter

Linux Kernel Parameter

# 커널이 할당할 수 있는 파일 핸들 최대값 조정 (max 65535) 
# 128M -> 8192 
# 256M -> 13684 
# 512M -> 32768 
# 1G -> 65536 
# 2G -> 131072 
fs.file-max = 65535

# 동시 사용자가 몰릴 경우에 대비해 received host대한 충분한 backlog 수치를 늘려주는 것이 좋음 
net.core.netdev_max_backlog=2500 

# 소켓 수신 큐 최대값과 기본값 조정. 

# 일반적인 경우의 대용량 Serving을 위한 설정. 기본 값이 변경되는 경우 아파치 등의 웹서버 설정을 특별히 해줄 필요는 없다고 함. 
net.core.rmem_default = 65536 
net.core.rmem_max = 8388608 

# 소켓 출력 큐 최대값과 기본값 조정. 
# 일반적인 경우의 대용량 Serving을 위한 설정으로 더 적은 시스템콜로 웹페이지를 네트웍 스택에 보낼 수 있음. 
# 기본 값이 설정되는 경우 아파치 등의 웹서버 설정을 특별히 해줄 필요는 없다고 함. 

net.core.wmem_default = 65536 
net.core.wmem_max = 8388608 

# TCP layer의 수신 버퍼를 상향 조정 
# 대량의 데이터를 클라이언트로 전송하는 경우에는 이 값을 추천.  
net.ipv4.tcp_rmem = 4096 87380 8388608 

# TCP layer의 송신 버퍼를 상향 조정 대량의 데이터를 클라이언트로 전송하는 경우에는이 값을 추천. 
net.ipv4.tcp_wmem = 4096 65536 8388608 

# The tcp_mem variable defines how the TCP stack should behave when it comes to memory usage. 
# TCP스택이 메모리를 어떻게 사용할지에 대한 메모리 페이지 단위 설정. 
# 순서대로 min pressure max설정이다. tcp_wmem과 tcp_rmem설정에 따른 적정한 크기를 할당한다. 
# IA32는 4KB가 한 개의 페이지이다. 
# ※ 이 설정 값은 네트워크 성능에 영향을 큰 영향을 줄 수 있으므로 주의가 요구된다. 
# {min} {pressure} {max} 
net.ipv4.tcp_mem = 4096 4096 4096 

# 유저 파일 핸들에 할당되지 않은 커넥션에 대해 몇번을 제거 시도를 할 것인지를 정하는 파라메터.
# 하이로드의 웹서버인 경우 이 값을 7이하로 떨어뜨릴 경우 “TCP: too many of orphaned sockets”와 
# “Out of socket memory”에 대한 커널 메시지가 나타날 수 있다. 
net.ipv4.tcp_orphan_retries = 7 

# 클라이언트의 소켓으로부터 RST을 받아 TIME_WAIT 상태로 가는 경우 즉시 소켓을 종료시킴. 
# 웹서버와 같은 유형의 서버에서는 소켓을 열고 닫는 회수가 많으므로 이 쪽을 튜닝하면 
# net.ipv4.tcp_max_tw_buckets 값을 줄이는 설정을 해도 됨. 파일 서버와 같은 경우는 이 값을 기본값으로 놓는 것이 좋음. 
net.ipv4.tcp_rfc1337 = 1 

# SPECWeb99의 권고는 인트라넷 네트워크에서만 사용하는 네트웍인 경우 selective  acknowledgements를 off 시킴으로써 성능이 향상된 
다고 함. SPECWeb99의 테스트는 완전한 1-2hop 이내의 네트워크 토폴로지를 가정하였으므로 일반적으로는 이 부분을 on으로 해주는 좋다 
는 권고. 

# ※ 외부 접속을 받는 네트워크에선 on으로 해야함. 
net.ipv4.tcp_sack = 1 

# SPECWeb99의 권고는 인트라넷 네트워크에서만 사용하는 서버인 경우 timestamps 생성를 off 시킴으로써 성능이 향상됨. 
# SPECWeb99의 테스트는 완전한 1-2hop 이내의 네트워크 토폴로지를 가정하였으므로 일반적으로는 
# 이 부분을 on으로 해주는 좋다는 권고. tcp_window_scaling 부분 참조 
# ※ 외부 접속을 받는 네트워크에선 on으로 해야함 
net.ipv4.tcp_timestamps = 1 

# tcp_sack와 tcp_timestamps의 경우와 같은 튜닝 관점이다. 
# 단, rmem, wmem과 tcp_rmem, tcp_wmem의 버퍼 상향 조정시에는 
# tcp_timestamps와 함께 on 설정을 해주어 윈도크기를 조절하도록 하는 것이 좋다고 권고함. 
net.ipv4.tcp_window_scaling = 1 

# KEEPALIVE 시간을 줄이면 비정상적으로 stale된 접속을 해제하는 시간을 줄일 수 있음. 
net.ipv4.tcp_keepalive_time = 1300 

# 소켓의 listen backlog 값 조정으로 동시접속이 몰릴 경우에 대한 최적화 
net.ipv4.tcp_max_syn_backlog = 8192 

# FIN_TIMEOUT 대기 시간을 줄이면 끊어진 소켓의 소거 시간을 줄일 수 있음. 
net.ipv4.tcp_fin_timeout = 30 

# 새 접속에서 사용할 수 있는 포트의 사용 가능 범위를 확장. 
net.ipv4.ip_local_port_range = 16384 65536 

# DOS 공격 중의 하나인 SYN flooding 공격을 막아주도록 On으로 변경. 
# 방화벽으로부터 보호되고 있어도 위 공격에 대한 대비책이 없다면 켜주는 것이 좋으나 성능에 영향이 있으며, 
# 이 부분을 켜주는 것 보다는 tcp_ 
net.ipv4.tcp_syncookies = 1 

# off상태면 두 네트웍 인터페이스간 IP 패킷 전달을 해제합니다.  
net.ipv4.ip_forward = 0 

# 웹서버와 같은 유형의 서버에서 high load에서는 사용자 소켓의 종료 진행에서 
# TIME_WAIT 상태가 되는데 이 것의 양이 60초간 지속 된다는 것을 가정하고 이 값을 충분히 높여 주는 것이 좋음. 
net.ipv4.tcp_max_tw_buckets = 2000000 

# Linux 2.4에서 주의해야할 점. 
# 주어진 경로에 대한 ssthread 값이 라우팅 테이블에 캐시되는데 이 값으로 윈도 값 설정이 감소하게 되면 
# 이후 10분간의 모든 다른 커넥션에 이 값을 사용하게 되므로 웹서버등에서는 켜주는 것이 좋을 것 같다.  
net.ipv4.route.flush = 1 

# 가상 메모리 하부 시스템의 성능 향상.  
# 가상 메모리 및 버퍼 메모리 관리에 대한 성능을 높여줌. 
vm.bdflush = 100 1200 128 512 15 5000 500 1884 2 

# 브로드캐스브, 멀티캐스트 주소에 ICMP ECHO 요청을 막음. smurf 공격 방지용 
# 
net.ipv4.icmp_echo_ignore_broadcasts = 1 

# SRR 옵션으로 패킷들을 수용한다. IP source routing 을 제어한다. 보통 호스트로 
# 향하게 하는 것을 권장한다. TRUE (router) FALSE (host) 
# 
net.ipv4.conf.all.accept_source_route = 0 

#net.ipv4.conf.all.send_redirects=0 
#net.ipv4.conf.all.accept_redirects=0 
# DOS 공격 중 하나인 IP Spoofing을 Source Route 를 검사해서 방지합니다. 
# 방화벽에서 막아주거나 외부에 노출되어 있지 않은 서버 등 공격의 우려가 없다면 끄는 것이 좋음.
# 알 수 없을 경우 on으로 설정해둡니다. 
# RFC182에 따른 IP spoof 방지를위한 설정(커널 2.2이상 버전) 
# 
net.ipv4.conf.eth0.rp_filter = 1 
net.ipv4.conf.lo.rp_filter = 1 
net.ipv4.conf.default.rp_filter = 1 
net.ipv4.conf.all.rp_filter = 1 

# Log Spoofed Packets, source Routed Packets, Redirect packetes 
# ip주소를 스푸핑한다고 예상되는 경우 로그에 기록하기 
# 
net.ipv4.conf.all.log_martians = 1 

# 공유 메모리 최대값 조정 
kernel.shmmax=3800000000 

# 세마포어 최대값 조정  
# 의미: {배열당 최대 SEM 수}{최대SEM시스템넓이}{SEMOP호출당최대OP수}{최대배열수}  
# 공식: {최대SEM시스템넓이} = {최대 배열 수} x {배열당 최대 SEM 수} (DB2 튜닝문서에 따름) 
kernel.sem=1000 32000 32 512 

# 메시지큐 시스템 크기 조정 
kernel.msgmni = 1024
  • 시스템 튜닝 (서버, 클라이언트)
# vi /etc/sysctl.conf

net.ipv4.tcp_sack = 0
net.ipv4.tcp_rmem = 4096 87380 16194304
net.ipv4.tcp_wmem = 4096 87380 16194304

net.core.rmem_max = 16194304
net.core.wmem_max = 16194304
net.core.rmem_default = 87380
net.core.wmem_default = 87380

net.core.optmem_max = 87380
net.core.netdev_max_backlog = 300000
net.ipv4.tcp_adv_win_scale = 1
  • offload 기능 비활성화 (서버, 클라이언트)
# ethtool -K eth0 gso off
# ethtool -K eth2 gso off
# ethtool -K eth0 lro off
# ethtool -K eth2 lro off
로그인하면 댓글을 남길 수 있습니다.
  • linux_kernel_parameter.txt
  • 마지막으로 수정됨: 2020/12/13 12:06
  • 저자 koov