Apache HTTP Server Version 2.4
파일기술자(file descriptor) 한계
가상호스트를 많이 사용하고 각 가상호스트에 서로 다른 로그파일을 지정하면, 아파치가 사용가능한 파일기술자(file descriptor, 흔히 파일핸들(file handle)이라고 부름)를 다 써버릴 수 있다. 아파치가 사용하는 파일기술자의 총 개수는 오류 로그파일당 한개, 다른 로그파일 지시어당 한개, 추가로 내부용도로 10-20개를 더한 수다. 유닉스 운영체제는 프로세스가 사용할 수 있는 파일기술자 개수를 제한한다. 이 한계는 보통 64개로, 보통 이보다 큰 hard-limit까지 늘릴 수 있다.
아파치는 이 한계를 필요한만큼 늘리려고 하지만, 실패하는 경우가 있다:
- 시스템이
setrlimit()
시스템호출을 제공하지 않는다. - (Solaris 2.3과 같이) 시스템에서
setrlimit(RLIMIT_NOFILE)
함수가 동작하지 않는다. - 필요한 파일기술자 개수가 hard limit 보다 많다.
- (Solaris 2) 시스템이 stdio 스트림을 256이하의 파일기술자만을 사용하도록 제한하는 등 파일기술자에 제약을 가한다.
이 경우 해결책은:
- 로그파일 개수를 줄인다.
<VirtualHost>
섹션에서 로그파일을 지정하지 않고 주 로그파일을 사용한다. (더 자세한 방법은 아래 로그파일 나누기를 참고하라.) -
사용하는 시스템이 (위의) 1번째나 2번째 경우에 해당한다면,
다음과 같은 스크립트로 아파치를 시작하기 전에 파일기술자
한계를 늘린다.
#!/bin/sh
ulimit -S -n 100
exec httpd
로그파일 나누기
여러 가상호스트가 같은 로그파일을 사용한다면 나중에 각 가상호스트의 통계분석을 위해 로그파일을 나누고 싶을 것이다. 이 작업은 다음과 같이 할 수 있다.
먼저 로그 항목에 가상호스트 정보를 추가한다. 이를 위해
LogFormat
지시어와 %v
변수를 사용한다. 이 변수를 로그
형식문자열 앞에 추가한다:
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
CustomLog logs/multiple_vhost_log vhost
그러면 common 로그형식 앞에 (ServerName
지시어에 나오는) 정규
가상호스트를 포함하여 로그파일을 기록한다. (로그파일
사용자정의에 관한 내용은 사용자정의 로그형식
을
참고하라.)
로그파일을 (가상호스트당 한 파일씩) 나누고 싶다면 split-logfile
프로그램을
사용한다. 이 프로그램은 아파치 배포본의 support
디렉토리에 있다.
다음과 같이 프로그램을 실행한다:
split-logfile < /logs/multiple_vhost_log
가상호스트 로그파일을 가지고 이 프로그램을 실행하면 로그파일에
나오는 각 가상호스트당 파일을 하나씩 만든다. 각각의 파일명은
hostname.log
이다.