BBUWOO'S [ LIKE UNIX ] WORLD Home > Lecture > Kernel > Kernel-3  

HOME
WHAT's BBUWOO?
LInux AnNyung
Open Source
    GitHUB
    GitHUB (for PHP)
LECTURE
MINI LECTURE
QnA BOARD
ENGLISH POEM


WARNNING

강좌의 모든 권리는 본인 김정균에게 있으며 이 강좌를 상업적 목적 으로 이용
하거나 다른 곳으로 옮길시에는 본인의 허락이 있어야 한다. 이글의 가장 최신글은
http://oops.org 에서 확인할수 있다.



3. Sysctl Configuration for Kernel parameters

sysctl은 Redhat 6.2 부터 포함된 kernel parameter 값들을 조절하기 위한 utility 이 다. sysctl 이 조절할수 있는 값들은 /proc/sys/ 아래에 있는 list 들이다. sysctl 에 대해서 언급을 하기전에 아주 강력하게 주의를 요할 것은 sysctl 을 이용하 여 값을 변경할 경우에는 시스템이 crash 되어질 위험요소가 많이 있다는 것을 명심해 야 한다. 즉 자기의 시스템에 무리한 값을 넣었을 경우 그 즉시 시스템이 멈출수도 있 기 때문에 충분한 테스트와 시스템이 crash 가 될 수 있음을 명심하고 책임을 질수 있 을 경우에만 만지기를 권장한다. [ sysctl 사용법 ] 보통 커널의 파라미터를 조정할때 proc 에서 echo 를 이용하여 redirect 로 직접 쓰는 경우가 많았다. 이렇게 조정을 할 경우에는 또 rc.local 같은 파일에 따로 기입을 해 줘야 하는 불편함이 있었다. RedHat 6.2 이후 배포판에는 procps package 에 sysctl 이라는 utility가 추가되어 이 것들을 관리를 할수 있게 되었다. 일단 조정할수 있는 모든 parameter 들은 [root@host ~]$ sysctl -a 명령으로 확인을 할 수가 있다. 그리고 특정값을 수정하기 위해서는 /etc/sysctl.conf 에 해당 키(이건 sysctl -a 명령에서 리스트를 확인 할수 있다)와 키값을 지정한 다음 [root@host ~]$ sysctl -p 명령으로 바로 적용을 시킬수 있다. 물론 sysctl.conf 에 기입이 되면 부팅시 마다 자 동으로 적용이 된다. 만약 잠시만 바꾸어 보고 싶다면 [root@host ~]$ sysctl -w net.ipv4.icmp_echo_ignore_all=0 과 같이 직접 값을 넣어 줄수도 있다. 이럴 경우에는 부팅이 되어 있는 순간만 적용이 된다. -p 옵션은 sysctl.conf 가 아닌 다른 파일을 설정 파일로 지정을 할 수 있게 한 다. 옵션값이 없으면 default 로 /etc/sysctl.conf 를 읽어 들이며 따로 path 를 지정 하면 해당 path 에 있는 파일을 읽어 들인다. 다음의 설정들은 Kernel 2.4 에서 사용할 만한 kernel parameter 값들을 정의해 놓은 sysctl.conf 의 내용이다. -----------------------> CUT HERE <---------------------------- ############################################################################## # SysCTL Configuration For Kernel 2.4 # 작성일 2000.4.18 # 김정균 < http://oops.org > # 참고 문서 : http://oops.org/?t=lecture&sb=kernel&n=3 # ############################################################################## ## File System Section ############################################################################## # 시스템전체에서 열수 있는 파일수(file-max) : file-max=램용량/4*256 # 4M당 256 개 # 128M -> 8192 개 # 256M -> 13684 개 # 512M -> 32768 개 # 1G -> 65536 개 # 2G -> 131072 개 # Improve the number of open files 즉, 하나의 프로세서에서 열수 있는 파일 갯수 # 등 조정은 커널소스에서 해야함(fs.h INR_OPEN / limits.h NR_OPEN) # # 정확하지는 않지만 커널 2.4.20 이 후부터는 커널이 직접 관리하도록 설정을 하지 # 않는 것이 좋다. 메가바이트당 64M 로 설정하는 것도 변경이 된 듯 싶다. # #fs.file-max = 8192 # inode-max 는 file-max 의 3~4 배를 지정하나 kernel 2.4 에서는 inode-max 를 사 # 용하지 않는듯 함 ############################################################################## ## Kernel Section ############################################################################## # 값이 0 일 경우, ctrl-alt-del 은 프로그램들을 일시 정지 시키고, init(1) 로 # restart 신호을 보내게 된다. 하지만 이 값이 1 보다 클경우, OS 는 dirty buffer # 의 동기화 없이 바로 reboot을 하게 된다. (이것은 저장한 것들을 모두 날릴수 있 # 다) # # 주의: dosemu 같은 프로그램이 'raw' mode 에 keyboard 를 가질때, ctrl-alt-del # 은 커널 tty layer에 도달하기 전에 그리고 이것이 무엇을 할지 결정하기 위해 프 # 로그램에 도달하기 전에 프로그램에 의해서 중단이 될 것이다. # # reboot 시 정보들을 안전하게 저장하기 위해 0으로 설정 # kernel.ctrl-alt-del = 0 # the magic-sysrq key 사용여부. 커널에서 magic key 지원 여부를 넣어 줘야 함 # kernel.sysrq = 1 # panic 의 값은 panic 상태에서 rebooting 하기전 kernel 이 얼마나 기다리는 값을 # 초단위로 나타낸다. watchdog 을 사용할때 60 으로 설정하는 것을 추천함. 0은 이 # 기능을 비활성화 시킴. # #kernel.panic = 0 # shmmax 는 공유 메로리를 사용할 때 공유 메모리 segment 의 최대 크기를 질의 하 # 는데 사용이 되어질 수 있으며, 또는 공유 메모리 segment 의 최대 크기를 설정할 # 수도 있다. shared memory segment 를 1 GB 이상으로 올리는 것을 커널에서 지원 # 을 한다. 이 값은 SHMMAX 의 기본값이 된다. # #kernel.shmmax = value # core dump 시 파일 이름에 PID 를 덧붙일 것인지를 조정한다. multi-thread 어플 # 리케이션들을 디버깅 하는데 유용하게 사용한다. # kernel.core_uses_pid = 1 ############################################################################## ## TCP Section ############################################################################## # interface들 사이에 패킷들을 교환시키는 것을 허락. 사내에서 방화벽을 구성하는 # 경우에나 사용 # net.ipv4.ip_forward = 0 # SRR 옵션으로 패킷들을 수용한다. IP source routing 을 제어한다. 보통 호스트로 # 향하게 하는 것을 권장한다. TRUE (router) FALSE (host) # net.ipv4.conf.all.accept_source_route = 0 # ICMP redirect message 들을 불허 # net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 # 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 net.ipv4.conf.default.rp_filter = 1 # Log Spoofed Packets, source Routed Packets, Redirect packetes # ip주소를 스푸핑한다고 예상되는 경우 로그에 기록하기 # net.ipv4.conf.all.log_martians = 0 # TCP 와 UDP 에 의해 사용될 local 포트 범위를 정의한다. 첫번째 숫자는 사용 할 # 영역의 가장 앞부분 포트 번호를 지정하고 두번째는 마지막 포트번호를 지정한다. # 기본값은 시스템의 사용가능한 메모리의 양에 의해 결정이 된다: 메모리가 128 Mb # 보다 많을 경우 32768-61000 메모리가 128Mb 보다 적을 경우 1024-4999 또는 이보 # 다 적게 지정한다. 이 값은 TCP 확장을 지원하지 않는 시스템으로 동시에 발생이 # 될수 있는 활성화된 접속들의 수를 결정한다. tcp_tw_recycle 을 가능하게 함으로 # 서 (기본적 으로) 1024-4999 영역은 timestamps를 지원하는 시스템들에 초당 2000 # 개의 접 속 정도를 가능하게 하 는데 충분하다. # # 커널 2.4.20 부터는 커널에서 메모리양을 자동으로 계산하여 지정하므로, 따로 설 # 정을 할 필요는 없음 # #net.ipv4.ip_local_port_range = 32768 61000 # 세팅되면 프로세스가 로컬 IP 가 아닌 주소에 bind() 할 수 있다. 매우 유용한 기 # 능이지만 어떤 어플리케이션에서는 나쁠 수 있다. 기본값: 0 # net.ipv4.ip_nonlocal_bind = 0 # 0 이 아닌 값을 세팅하면 동적 주소를 (dynamic addresses) 지원한다. 1 보다 큰 # 값을 세팅하면 동적주소가 다시 쓰여질 때마다 로그 메시지가 출력될 것이다. # # 이 값은 부팅시에 rc.sysinit 에서 /etc/sysconfig/network-scripts/ifcfg-eth* # 를 파싱하여 자동으로 설정함 # net.ipv4.ip_dynaddr = 0 # ICMP ECHO 요청을 처리. Ping 과 관련이 있음. 이 값을 이용하여 PING 을 막는 것 # 보다 iptables 를 이용해서 icmp_request 를 막는 것이 효과적 # net.ipv4.icmp_echo_ignore_all = 0 # 브로드캐스브, 멀티캐스트 주소에 ICMP ECHO 요청을 막음. smurf 공격 방지용 # net.ipv4.icmp_echo_ignore_broadcasts = 1 # 어떤 router 들은 broadcast frame 들로 거짓 응답을 보냄으로서 RFC 1122를 위반 # 한다. 이러한 위한들은 보통 커널 경고를 통해 로깅이 된다. 이것을 TRUE 로 설정 # 을 할경우 커널은 이러한 경고를 하지않을 것이며, 로그 파일이 지저분해 지는 것 # 을 피할수 있다. 기본값은 FALSE 이다 net.ipv4.icmp_ignore_bogus_error_responses = 1 # 1/100 초 동안에 받아들이는 igmp memberships의 수 # net.ipv4.igmp_max_memberships = 20 # 활성화된 TCP 접속이 재전송을 시도하게 하기 위한 최초 SYN시간의 값을 정한다. # 255 보다 높아서는 안된다. 기본값은 5이며, 180 초에 대응이 된다. # net.ipv4.tcp_syn_retries = 2 # passive TCP 접속시도가 재접속을 하기 위한 SYNACKs의 값을 정한다. 255 보다 높 # 게 지정할 수 없다. 기본값은 5이며, 180초에 대응이 된다. # net.ipv4.tcp_synack_retries = 2 # keepalive 가 활성되 되어 있을 경우, 얼마나 자주 TCP 가 keepalive 메세지를 보 # 내게 할 것인지를 설정. 기본값은 2시간 이다. # net.ipv4.tcp_keepalive_time = 600 # 연결이 끊어졌다고 판단할 때까지, 얼마나 keepalive probe 를 보낼지 결정. 기본 # 값 9회 # net.ipv4.tcp_keepalive_probes = 5 # keepalive_probes 를 보낼 간격을 정함. probe 를 보낸 후, probes * intvl 의 시 # 간이 지나도록 응답이 없으면 연결이 해제된 것으로 간주하게 됨. 기본 값의 사용 # 시 11분 15초 동안 재시도를 하고 연결을 취소함. 값은 초단위 # net.ipv4.tcp_keepalive_intvl = 10 # 서버 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 정한다. 기본 값은 7 로 # RTO 50 초에서 16 분 사이에 해당한다. 웹 서버가 운영 중 이라면 이 값을 줄여서 # 소켓 등이 귀한 리소스를 소비하지 않도록 할 수도 있다. # net.ipv4.tcp_orphan_retries = 2 # 무언가 잘못되었을 경우, network layer로 이 현상을 reporting 하기전 다시 확인 # 을 하기 위한 횟수를 지정한다. 최소 RPC 값은 3 이며, 이는 RTO 상에서 3 초에서 # 8 분 사이에 응답을 하도록 하는 것이 기본값이다. # net.ipv4.tcp_retries1 = 3 # tcp 연결해제 시간을 줄이며 불필요한 ip확장기능을 사용하지 않음 # # Decrease the time default value for tcp_fin_timeout connection # 소켓이 항상 close 되기 전에 마지막 FIN을 기다리는 시간 # net.ipv4.tcp_fin_timeout = 20 # 동시에 유지 가능한 timewait 소켓의 수. 지정된 숫자를 초과할 경우 timewait 소 # 켓이 없다는 경고 메세지 출력. 64M 당 180000 으로 계산을 하면 됨. # 64M -> 180000 # 128M -> 360000 # 256M -> 720000 # 512M -> 1440000 # 1G -> 2880000 # 2G -> 5760000 # # 이 값은 부팅시에 자동으로 감지하여 설정이 됨. 고정을 하고 싶을 경우에는 # /etc/sysconfig/kernel-parameter 의 MEM_AMOUNT=램사이즈 를 설정하면 됨. # 램사이즈는 Mbyte 단위로 1G 는 1024M 로 계산을 함. # net.ipv4.tcp_max_tw_buckets = 2700000 # 빠른 재생 TIME-WAIT 소켓을 사용한다. 기본값은 1이다. 전문가의 조언 / 요청이 # 없다면 절대 바꾸지 마라. # net.ipv4.tcp_tw_recycle = 1 # 프로토콜 관점에서 안전하다고 판단될 때 새로운 연결에 대하여 TIME-WAIT 소켓을 # 재사용하는 것을 허락한다. 기본값은 0 이다. 이 값은 기술 전문가의 조언이나 요 # 청이 없이 변경하지 않는 것이 좋다. # net.ipv4.tcp_tw_reuse = 0 # 리스닝 서비스가 새로운 연결을 수락하기에 너무 느리다면 그 서비스를 리셋한다. # 기본값은 FALSE 이다. 이 것은 갑자기 오버플로가 발생 하더라도 연결이 복구된다 # 는 뜻이다. 리스닝 데몬이 연결을 더 빨리 수락하도록 자리잡지 못하는게 정말 확 # 실할 때에만 이 옵션을 활성화 한다. 이 옵션을 활성화하면 서버에서 손상된 클라 # 이언트라도 리슨 하게 된다. # net.ipv4.tcp_abort_on_overflow = 0 # kernel 을 CONFIG_SYNCOOKIES 를 설정 하여 생성을 하였을 때만 사용이 유효하다. # socket으로 syn backlog queue 가 넘칠때 syncookies 를 보낸다. 이것은 일반적인 # 'syn flood attack' 이라는 공격을 방어 하기 위해 사용이 된다. 기본 값은 FALSE # 이다. # # syncookies 는 대체 방법일 뿐 이라는 것을 명심해야 한다. 이것은 정상적인 접속 # 에 대해 더 좋은 성능을 내게하는 것에 사용이 되는 것은 아니다. 만약 로그에서 # synflood 경고를 보게 된다면, 하지만 이것들이 정상적인 접속들이 넘쳐서 발생한 # 것들 이라면 이 경고가 사라지기 전에 tcp_syncookies 가 아닌 다른 파라미터들을 # 조절해야 한다.tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow # 를 참고를 하라. # # syncookies는 TCP 프로토콜에 심각하게 어긋나며, TCP 확잗들을 사용하는 것을 허 # 락하지 않으며, (SMTP relaying 같은) 특정서비스들의 심각한 손상의 결과가 될수 # 있다. 만약 실제 넘치지 않음에도 불구하고 로그에 synflood경고가 계속 발생한다 # 면, 서버의 설정이 심각하게 잘못되어 있는 것이다. # net.ipv4.tcp_syncookies = 1 # TCP urg 포인터 필드 해석기가 필요할 때에 사용한다. 대부분 오래된 BSD 해석기 # 를 사용하는데, 리눅스가 그런 것들과 제대로 소통하지 못한다고 판단될 경우, 활 # 성화를 해 볼만하다. 기본값은 FALSE 이다. # net.ipv4.tcp_stdurg = 1 # 접속한 client 들 중 승인을 받지 못하는 접속 요청들의 최대값을 지정 한다. 만 # 약 승인을 받지 못하고 기다리는 접속 요청들이 이 수를 벗어나는 경우에는 "다시 # 재접속을 해 보라" 라는 메세지를 받게 된다. 128 Mb 의 메모리에서는 기본값으로 # 1024를 사용할수 있으며, 이보다 적은 메모리를 가지고 있을 경우에는 128을 사용 # 하기를 권장한다. 만약 서버에 부하가 많이 걸리게 된다면 이값을 증가해 보기 바 # 란다. 주의할 것은, 1024 보다 크게했을 경우 include/net/tcp.h 에서 # (TCP_SYNQ_HSIZE*16)이 tcp_max_syn_backlog 와 같거나 이보다 작게 # TCP_SYNQ_HSIZE 를 변경해 줘서 커널을 다시 빌드 해야 한다. 커널을 수정하지 않 # 았을 경우의 최대값은 8192 정도 까지 지정할 수 있다. # # 이 값은 부팅시에 자동으로 감지하여 설정이 됨. 고정을 하고 싶을 경우에는 # /etc/sysconfig/kernel-parameter 의 MEM_AMOUNT=램사이즈 를 설정하면 됨. # 램사이즈는 Mbyte 단위로 1G 는 1024M 로 계산을 함. # net.ipv4.tcp_max_syn_backlog = 1024 # RFC1323 에 정의된 window scaling 을 가능하게 한다. # net.ipv4.tcp_window_scaling = 1 # RFC1323 에 정의된 timestamp 들을 가능하게 한다. # net.ipv4.tcp_timestamps = 1 # SYN 패킷을 전송한 후에 로스가 발생을 하여 ACK 를 일부 받지 못했을 경우, 선택 # 적으로 (selected) 받지못한 ACK 만 받도록 요청하는 것을 허락한다. 로스가 많은 # 네트워크에서는 상당히 중요한 역할을 한다. # net.ipv4.tcp_sack = 1 # FACK 밀집 회피와 빠른 재전송을 가능하게 한다. tcp_sack 이 활성화가 되어 있지 # 않으면 이 값은 사용되지 않는다. # net.ipv4.tcp_fack = 1 # TCP가 중복된 SACK 들을 보내는 것을 가능하게 한다. # net.ipv4.tcp_dsack = 1 # TCP 에 명백한 혼잡 공지(Explicit Congestion Notification) 를 가능하게 한다. # net.ipv4.tcp_ecn = 0 # TCP stream 에 패킷들의 최대 재 요청을 설정. 기본값은 3 이다. # net.ipv4.tcp_reordering = 3 # Socket Buffer Turning # 메모리가 1G 이상이면 사용해 보도록 한다. # # 이 값은 부팅시에 자동으로 감지하여 설정이 됨. 고정을 하고 싶을 경우에는 # /etc/sysconfig/kernel-parameter 의 MEM_AMOUNT=램사이즈 를 설정하면 됨. # 램사이즈는 Mbyte 단위로 1G 는 1024M 로 계산을 함. # #net.ipv4.tcp_rmem = 4096 25165824 25165824 #net.ipv4.tcp_wmem = 4096 65536 25165824 #net.core.rmem_default = 25165824 #net.core.rmem_max = 25165824 #net.core.wmem_default = 65536 #net.core.wmem_max = 25165824 # 세팅되면 TCP 스택은 RFC1337을 따른다. 해제되면 RFC를 따르지 않지만 TCP # TIME_WAIT asassination 은 막아준다. 기본값은 0 이다. # net.ipv4.tcp_rfc1337 = 1 -----------------------> CUT HERE <---------------------------- 다음은 sysctl.conf 에서 사용할 kernel parameter 들에 대해 다루겠다. 다음 부터 나 오는 문서들은 kernel doc 에서 sysctl 에 관련된 문서들을 번역한 것들이다.



>> 이전 : Kernel 2.4.x Installation
>> 다음 : Sysctl for Virtaul Memory in Kernel



    



 Home > Lecture > Kernel > Kernel-3

Copyright 1997-2021 JoungKyun Kim 
LAST MODIFIED: 2017/01/19