(출처) http://meetup.toast.com/posts/54, http://board.theko.co.kr/bbs/board.php?bo_table=B11&wr_id=140
- 시스템에서 현재 Open 되어 있는 파일 개수 확인 과 관련하여, limits.conf 와 sysctl.conf 의 차이점이 있다. sysctl.conf 는 시스템에서 전체 File Open 개수를 설정하고, limits.conf 는 계정별로 File Open 을 설정한다.
- 시스템의 전체 File Open 개수 확인 하기
(fs.nr_open 파라미터는 하나의 프로세스가 열 수 있는 최대 파일 개수) - cat /proc/sys/fs/file-nr
3328 0 97764
3328 - 현재 오픈 가능한 최대 파일 개수
0 - 커널에서 현재 사용중인 파일 수
97764 - 커널에서 최대로 오픈할 수 있는 파일 수 - # lsof | wc -l // 현재 시스템에서 오픈되어 있는 파일의 개수
1813 - 리눅스 시스템에서 최대 File Open 개수 확인 및 적용 하기
(fs.file-max 파라미터는 시스템 전체에서 최대로 열 수 있는 파일 개수) - #sysctl -a | grep fs.file-max // 설정된 값 확인하기
fs.file-max = 97175 - #vim /etc/sysctl.conf // 파일 수정
fs.file-max = 98175 - #sysctl -p // 설정 값 적용
- # sysctl -a | grep fs.file-max // 적용된 값 확인하기
fs.file-max = 98175 - #cat /proc/sys/fs/file-max // 해당 파일에서도 직접 확인할 수 있다.
98175 - 리눅스 계정 별 최대 File Open 개수 확인 및 제한 하기
- # ulimit -a | grep open // 설정된 값 확인하기
open files (-n) 8192
또는
# ulimit -n
8192 - # vim /etc/security/limits.conf // user1 의 File Open 개수 제한 설정 하기
user1 soft nofile 2048
user1 hard nofile 2048 - # su - user1 // user1 로 스위칭하여 적용된 값 확인하기
$ ulimit -a | grep open
open files (-n) 2048 - $ ulimit -n // 적용된 값 확인하기
2048 - $ lsof -u UID(user1) | wc -l // user1 의 UID 로 열려 있는 파일 개수 확인하기
51 - 각각의 파라미터의 연관 관계
fs.file-max >= fs.nr_open >= ulimit -n - RHEL 버전별 fs.nr_open 과 fs.file_max 의 기본 값
- RHEL4 (fs.nr_open / fs.file_max)
1048576 / 203450 - RHEL5 (fs.nr_open / fs.file_max)
1048576 / 102249 - RHEL6 (fs.nr_open / fs.file_max)
1048576 / 98852
4. 네트워크 capacity 관련 파라미터
4.1 maximum file count
리눅스를 비롯한 일반적인 유닉스에서 소켓은 마치 파일과 같은 취급을 받습니다.
전체 시스템에서 가질 수 있는 파일 개수가 제한이 있다면, 당연히 소켓의 전체 개수에 영향 미칠 것 입니다.
리눅스에서 전체 시스템이 가질 수 있는 최대 파일 개수 제한은 'fs.file-max
' 커널 파라미터에서 설정 됩니다.
현재 설정값을 확인하려면, 아래와 같은 명령어를 사용합니다.
$ sysctl fs.file-max
fs.file-max = 775052
이 값은 일반적으로 적당히 큰 값이 설정되어 있으므로, 웬만하면 손 볼 일이 없을 것입니다.
다만, 시스템이 굉장히 많은 파일과 소켓을 사용하는 경우, 이 값에 의해 시스템이 오동작 할 수 있으니 참고바랍니다.
(이 값을 넘어가면 open() 시스템 콜에서 'Too many open files
'와 같은 에러가 발생 될 것 입니다.)
다시 말하자면, 시스템 전체에 대한 허용 소켓 개수는 'fs-file-max
' 커널 파라미터 설정값이 적당히 높게 설정되어 있으므로 큰 문제가 안됩니다.
사실, 어떤 프로세스가 가질 수 있는 소켓 개수 제약은 그보다는 프로세스별 제한 설정인 user limit 값을 살펴봐야 할 것 입니다.
다음과 같은 명령어로 이를 확인할 수 있습니다.
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30473
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 30473
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
여기서 open files가 프로세스가 가질 수 있는 소켓 포함 파일 개수입니다.
적당량 증가시키기 위해서는 다음과 같은 명령어를 사용합니다.
$ ulimit -SHn 65535
많은 개수의 소켓을 사용하는 서버 프로그램은 구동하기 전, ulimit 명령어로 프로세스 당 최대 파일 개수를 증가시켜주어야 할 것 입니다.
(혹은, 해당 애플리케이션 로직내에서 setrlimit() 시스템 콜로 이를 증가시키는 방법도 있습니다.)
'fs.file-max
'와 유사한 이름의 'fs.file-nr
'이라는 커널 파라미터가 있는데, 사실 이 파라미터는 일반적인 파라미터가 아니라 현재 열려 있는 파일 현황을 나타냅니다.
아래와 같은 명령어로 현재 현황을 알 수 있습니다.
$ sysctl fs.file-nr
fs.file-nr = 5024 0 775052
세 값은 각각 현재 열려 있는 파일의 수, 현재 열려 있으나 사용되지 않는 파일의 수, 열 수 있는 파일의 최대 개수를 뜻합니다. 물론 시스템 전체에 대한 수치입니다.
'Engineering > __00. Linux' 카테고리의 다른 글
AES-NI (0) | 2018.06.27 |
---|---|
uuid , fstab, ntfs ntfs-3g mount (0) | 2018.03.24 |
[Ubuntu] system boot problem (0) | 2017.04.24 |
[NFS RPC] (0) | 2017.02.22 |
[SSH] alive (0) | 2016.11.08 |