이전 Linux 시스템에서는 커널 컴파일을 해야만 file descriptor limit 나 기타 사항을 설정할 수 있었으나 최근 Linux 시스템에서는 설정 파일을 변경함으로 쉽게 설정할 수 있다.
1. 계정 별 프로세스 file descriptor(소켓 등 포함) 제한 확인
각 계정 마다 하나의 프로세스가 가질 수 있는 file descriptor에 제한이 있다.
이 제한에는 Soft limit와 Hard limit 두 가지가 있는데,
Soft limit 는 새로운 프로그램이 생성되면 디폴트로 적용되는 제한 값이고
Hard limit 는 Soft limit 부터 늘릴 수 있는 최대 값 이다.
Hard limit 는 root 만 조정이 가능하지만 무한히 늘릴 수는 없다.
ulimit 명령어는 bash 에서 사용할 수 있으며, csh 에서는 limit 명령어를 사용한다.
Ÿ Soft limit ( 기본값 ) 확인
# ulimit –aS 또는 ulimit –a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited pending signals (-i) 1024 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 69632 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited |
Ÿ Hard limit ( 최대값 ) 확인
# ulimit –aH core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited pending signals (-i) 1024 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 2048 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 69632 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited |
2. 계정 별 프로세스 file descriptor(소켓 등 포함) 제한 확인
Ÿ 임시 open files 개수 수정
# ulimit -n 2048 |
Ÿ 영구 open files 개수 수정
# vim /etc/security/limits.conf [user id] soft nofile 2048 à soft limit [user id] hard nofile 2048 à hard limit |
3. 시스템 file descriptors(소켓 등 포함)
시스템에서 허용되는 최대 file descriptor(소켓 등 포함)을 설정하는 것으로
Kernel 2.2.x 를 사용하는 Linux 시스템의 경우 /proc/sys/fs/file-max 와 /proc/sys/fs/inode-max 도 수정해야 한다.
일반적으로 inode-max는 file-max의 2 ~ 3배로 설정해야 한다.
Kernel 2.4.x 이상 에서는 /proc/sys/fs/file-max 만 수정한다.
그리고 최근 RedHat 에서는 /etc/sysctl.conf 만 수정하면 된다.
Ÿ /proc/sys/fs/file-max 수정 방법
# cat /proc/sys/fs/file-max 6815744
# echo 32768 > /proc/sys/fs/file-max |
Ÿ /proc/sys/fs/inode-max 수정 방법
# cat /proc/sys/fs/inode-max
# echo 131072 > /proc/sys/fs/inode-max |
Ÿ /etc/sysctl.conf 수정 방법
# sysctl -n fs.file-max 6815744
# vim /etc/sysctl.conf fs.file-max = 6815744 à 수정 |
4. 프로세스 별로 오픈 된 파일 개수 확인
lsof -p PID | wc -l |
5. 기타
/usr/include/bits/typesizes.h 에있는 __FD_SETSIZE 값을 변경하지 않으면 select기반의 socket 함수들은 1024로 동작한다. 따라서 해당 값을 늘려준다.
[출처] File descriptor 제한 수(소켓 등 포함) 수정|작성자 ryangjm
'IT > APUE' 카테고리의 다른 글
sendfile 함수 (0) | 2014.05.07 |
---|---|
시스템 구성설정 변수값 확인(getconf) (0) | 2014.02.25 |
open() (0) | 2014.02.25 |