2005/09/11

솔라리스 10에서의 자원의 설정 : 가용 file descriptor의 변경

솔라리스 9전에는 애플리케이션이 사용하고자하는 최대 오픈 가능한 화일을 조정하기 위하여 화일 디스크립터(fd)의 수를 /etc/system에 추가해서 변경하였었다.

/etc/system :
set rlim_fd_cur=2048 ; 애플리케이션에 기본으로 할당되는 fd 개수, soft limit
set rlim_fd_max=4096 ; 애플리케이션 내에서 시스템콜(setrlimit)으로 변경(증가)시킬 수 있는 최대의 fd 수, hard limit

그리고, reboot이 반드시 필요했다.

솔라리스 9이후부터는 특히, 솔라리스10에서는 이러한 자원의 설정과 변경의 개념은 '사용자'와 '프로젝트'라는 특별히 확장된 형태의 '그룹'의 개념을 기반으로 자원을 동적으로 설정 및 변경할 수 있도록 바뀌었다. 동적이란 말은 당연히 설정 이후에 시스템 '재부팅'이 전혀 필요없음을 의미하는 것이다.

실제 어떻게 적용하는 지를 보기위해서 아래 예를 보도록 하자.
솔라리스 10에서 apache라는 사용자를 만들어서, apache라는 사용자가 웹서버를 운영한다고 가정하자.
apache라는 사용자로 로그인을 한후 apache의 각종 리소스가 어떻게 설정되어 있는 지를 확인하기 위해서는 다음과 같이 실행하면 볼 수 있다.
#prctl -P $$ more

그중에서 file-descriptor를 보기위해서는
#prctl -P $$ fgrep -i file-des
을 실행하게 되면,
process.max-file-descriptor basic 256 - deny 1113
process.max-file-descriptor privileged 65536 - deny -
process.max-file-descriptor system 2147483647 max deny -
와 같은 결과를 볼 수 있게 된다.

위에 나타난, 'basic'은 일반 사용자, 'privileged'는 root권한 혹은 그에 대응하는 권한을 가진 사용자, system은 전체 시스템 최대값을 의미하게 된다.

사용자의 애플리케이션이 privleged 권한으로 수행할 수 있고, 코드안에서 setrlimit을 사용하여 필요한만큼 증가하는 구조를 가지고 있다면, 솔라리스10의 기본 설정은 결코 부족하지 않게 된다.그러나, 일반 사용자인 경우 'basic'의 숫자는 때로는 모자랄 수 있으며, 이런 경우에는 기본 값을 증가시킬 필요가 있다.

이때 이 basic 값을 증가시키기 위해서는 다음과 같이 실행한다.
일단 해당 사용자(여기서는 apache)의 기본 프로젝트를 확인한다.
기본 프로젝트를 확인하기 위해서는
#projects -d
를 실행한다.

만약 'default'라고 나온다면

자원의 기본 설정을 변경하기 위해서 다음과 같이 실행한다.
#projmod -K "process.max-file-descriptor=(basic,2048,deny)" default




참고적으로, root 사용자로 웹 서버를 돌리는 행위는 보안적인 측면에서나 관리측면에서 매우 어리석은 짓이다. 설사 웹서버가 80포트에 바인딩하기 때문에 root Privilege가 필요하다 하더라도
일반 사용자가 RBAC기능을 이용하여 80포트를 바인딩하도록 하는 것이 바람직하다.
RBAC 기능은 후에 언급하도록 하겠다.