ulimit는 유저가(쉘, 프로세스)에 대해서 할당할 자원의 한계를 정하는 것으로
다중 프로그램/사용자를 기본으로 하는 리눅스 시스템에서 과부하를 막아주는 설정이다.
나 같은 경우는 linux서버의 openfile, corefile size를 많이 제어하는데 사용한다.
그 이유는 분산처리 파일 환경, 또는 디비서버를 운영할 경우 동시에 많은 파일들이
읽고 쓰고를 해서 openfile error가 생기는것을 막기 위해서 이다.
기본적으로 hard 설정과 soft 설정이 있는데
각 설정을 보려면 아래의 명령어로 확인한다.
$ ulimit -Ha
$ ulimit -Sa
(하드 설정 전체 보기 / 소프트 설정 전체 보기)
하드는 해당쉘의 최대값을 뜻한다 하면 되고, 소프트는 현재 설정을 말한다 생각하면 된다.
hard 설정의 경우는 root권한으로만 변경 가능
$ ulimit -Sa
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 266
virtual memory (kbytes, -v) unlimited
ulimit -Sn 10240 <- 이런 식으로 각 설정별 옵션을 사용해서 변경 가능하면 된다.
형식은
--limit.conf--
[유저이름] [hard/soft] [설정할 항목] [설정값]
ex)
mklife hard nofile 320000 => mklife 유저는 한번 접속에 하드세팅으로 32만개 파일까지 열수 있다.
mklife hard nproc 10000 => mklife 유저는 한번 접속에 하드 세팅으로 1만개 프로시져를 생성가능
mklife soft nproc 10000 => mklife 유저는 한번 접속에 소프트 세팅으로 1만개 프로시져를 생성가능
echo "4194303" > /proc/sys/net/core/rmem_default
echo "16777215" > /proc/sys/net/core/rmem_max
echo "4194303" > /proc/sys/net/core/wmem_default
echo "16777215 " > /proc/sys/net/core/wmem_max
echo "100000" > /proc/sys/net/core/netdev_max_backlog
echo "4194303" > /proc/sys/net/core/optmem_max
echo "1048576 16777216 33554432" > /proc/sys/net/ipv4/tcp_rmem
echo "1048576 16777216 33554432" > /proc/sys/net/ipv4/tcp_wmem
cp_time_wait 은 TCP/IP 프로토콜에서 통신채널을 끊을때 (TCP_FIN) 발생하는 시간으로 연결을 완전히 끊기 전에
클라이언트로 부터 받을 데이터를 못 받게 되는 상황에 대비하여 완전히 끊기 전에 기다리는 시간이다.
만일 시스템에 설정된 양보다 대량의 요청이 발생되게 된다면 WAIT 하는 세션들이 필요이상으로 많아질 것이다.
실제 WAIT 중인 세션들은
# netstat -an | grep TIME_WAIT
명령으로 확인할 수 있다.
그럼 OS의 tcp_time_wait 수치를 확인하려면
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
시간은 초단위이고 기본값은 60이다. 대량의 요청이 발생한다면 10초 정도로 맞춰주는게 권장값이다.
# echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout
명령으로 현재 파라미터 값을 조정할 수 있다.
재부팅시에도 이 값을 유지하고 싶다면
/etc/rc.local 등에 위 명령을 넣거나
/etc/sysctl.conf 에
net.ipv4.tcp_fin_timeout = 10
라인을 추가해준다.
net.ipv4.tcp_tw_recycle= 1
net.ipv4.tcp_tw_reuse= 1