Skip to content

sysctl 조정 방법

조회 수 7216 추천 수 0 2013.04.25 01:19:37
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 들은

$ sysctl -a

명령으로 확인을 할 수가 있다. 그리고 특정값을 수정하기 위해서는 /etc/sysctl.conf
에 해당 키(이건 sysctl -a 명령에서 리스트를 확인 할수 있다)와 키값을 지정한 다음

$ sysctl -p

명령으로 바로 적용을 시킬수 있다. 물론 sysctl.conf 에 기입이 되면 부팅시 마다 자
동으로 적용이 된다. 만약 잠시만 바꾸어 보고 싶다면

$ 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://www.oops.org >
#                    참고 문서 : http://www.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

[출처] sysctl 조정|작성자 사이먼


profile

일요일은 짜빠게뤼~ 먹는날~^^

엮인글 :
http://adminplay.com/197350/a69/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수

[ UDP ] packet buffer size 조절

리눅스 메모리 관리, 왜 메모리 여유공간이 없을까? (top ...

sysctl 조정 방법

웹 언어별 no-cache 리스트

ubuntu 부팅시 서비스 자동실행 및 실행방지

Installing NGINX, PHP, and MySQL on Ubuntu 10.04 LTS u...

Bigbluebutton Installation Ubuntu

dpkg 사용법

[Ubuntu] 부팅시 시작되는 데몬 관리하기 – update-rc.d

ubuntu 10.04 에서 Nginx, Mysql, PHP5

우분투(Ubuntu) ssh 설정하기

proxy 서버 통해서 외부문서 불러오기 curl

운영중인 Linux 서버에서 NTFS 파일 시스템 삭제하기

Sample rate(샘플레이트)와 Bit rate (비트레이트)

도메인 Status 상태별 설명 안내

sakai 2.7.0 source installation in ubuntu 10.04.1 file

Ubunt (우분투) 에서 sun-java6-jdk 설치

Unbunt OS 에서 Maven 설치(Install it – apt-get install)

우분투 DNS 변경 및 고정

우분투 네트웍크 설정

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234